【问题标题】:Cross domain ajax request to a json file using JSONP使用 JSONP 对 json 文件的跨域 ajax 请求
【发布时间】:2013-10-29 16:14:45
【问题描述】:

我想从 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。我无法理解它是如何工作的。有人可以解释一下它的工作方式吗?

【问题讨论】:

  • 服务于 JSON 的域是否真的支持 JSONP? (或者它是您的域,因此您可以使它支持 JSONP?)
  • 这只是我的域。我怎样才能让它支持jsonp?
  • 抱歉,当网上已经有很多“如何实现 jsonp”教程时,我真的没有耐心从头开始编写教程。 (例如,here's one。)

标签: jquery ajax json jsonp


【解决方案1】:

您的服务必须返回 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?

【讨论】:

  • 非常感谢。它帮助很大。以下链接包含我使用 jquery 和 php 的 sn-p。 [pastebin.com/kWnWVXDh]
  • 嘿@Saranya,你能分享任何链接完整的演示!这将非常有帮助!请
  • 嘿@Saranya,json-p 的帖子怎么样,你能详细说明一下吗?
【解决方案2】:

你有没有试过这样称呼它:

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

看看会发生什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2013-06-19
    • 2012-07-29
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多