2013-10-21 47 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); 
}); 

看看会发生什么?