使用JSONP跨域ajax请求到json文件

时间:2013-10-21 08:52:31

标签: jquery ajax json jsonp

我想从domain2(example2.com)访问domain1(example.com)中的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。我无法理解它是如何工作的。有人可以解释一下它的工作方式吗?

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分:-1)

您是否尝试过将其称为:

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

看看会发生什么?