2013-10-21 109 views
3

我想從域名2(example2.com)訪問位於domain1(example.com)中的JSON文件。例如,使用JSONP將域名ajax請求傳遞給json文件

$.ajax({ 
    type:'get', 
    url: 'http://example.com/vigneshmoha.json', 
    success: function(data) { 
     console.log(data); 
    }, 
    statusCode: { 
     404: function() { 
      console.log('Status code: 404'); 
     } 
    } 
}); 

我想從某個其他域(例如example2.com)向example.com發出這個ajax請求。

我試過JSONP。我無法理解它是如何工作的。有人能解釋一下它的工作方式嗎?

+1

服務於JSON的域實際上是否支持JSONP? (或者它是你的域名,所以你可以_make_它支持JSONP?) – nnnnnn

+0

這是我的域名。我怎樣才能讓它支持jsonp? – vigneshmoha

+0

對不起,當網上已經有任何數量的「如何實現jsonp」教程時,我並沒有真正耐心編寫教程。 (例如,[這裏是一個](http://devlicio.us/blogs/scott_seely/archive/2010/09/07/how-jsonp-works-and-some-bits-about-implementing-it-in-wcf。 aspx)。) – nnnnnn

回答

9

你的服務必須返回jsonp,它基本上是javascript代碼。 您需要從ajax請求爲服務提供回調函數,返回的是函數調用。

下面是一個工作示例。

AJAX請求:

$.ajax({ 
      crossDomain: true, 
      type:"GET", 
      contentType: "application/json; charset=utf-8", 
      async:false, 
      url: "http://<your service url here>/HelloWorld?callback=?", 
      data: {projectID:1}, 
      dataType: "jsonp",     
      jsonpCallback: 'fnsuccesscallback' 
     }); 

服務器端代碼返回JSONP(C#):

public void HelloWorld(int projectID,string callback) 
    { 

     String s = "Hello World !!"; 
     StringBuilder sb = new StringBuilder(); 
     JavaScriptSerializer js = new JavaScriptSerializer(); 
     sb.Append(callback + "("); 
     sb.Append(js.Serialize(s)); 
     sb.Append(");"); 
     Context.Response.Clear(); 
     Context.Response.ContentType = "application/json"; 
     Context.Response.Write(sb.ToString()); 
     Context.Response.End(); 
    } 

參見What is JSONP all about?

+0

非常感謝。它幫助了很多。以下鏈接包含我的代碼片段使用jQuery和PHP。 [http://pastebin.com/kWnWVXDh] – vigneshmoha

+0

歡迎您..! – Saranya

+0

嗨@Saranya,你可以分享任何鏈接完整的演示!這將是非常有益的! plz – Vikrant

-1

你試過調用它爲:

$.getJSON('http://example.com/vigneshmoha.json?callback=foo', null, function(data) { 
      console.log(data); 
}); 

看看會發生什麼?