【问题标题】:using $.getJSON() with machine on same subdomain?将 $.getJSON() 与同一子域上的机器一起使用?
【发布时间】:2013-03-24 01:34:54
【问题描述】:

我的网络服务器名称是mybox.ourcorp.ourdomain.com。从中我试图对同一子域中的另一台服务器进行 json 调用--http://otherbox.ourcorp.ourdomain.com/feed

如果我在我的网络服务器上打开浏览器并将该 URL 粘贴到其中,我会返回 json 数据,没问题。但将其放入$.getJSON() 我没有返回任何值:

        $.getJSON('http://otherbox.ourcorp.ourdomain.com/feed', function (json) {
               storeDataFeed(json); //<----json is null
        });

这是同源策略问题吗?我不这么认为,因为它们在同一个子域中?

如果是这样,是否必须以某种方式设置 otherbox 才能使用 jsonp 才能让我走这条路?

有没有办法找出为什么对.getJSON 的调用返回null?浏览器控制台中没有消息。

【问题讨论】:

  • 您可以在网络选项卡中使用 chrome 开发人员工具调查服务器返回的内容以及响应内容。您应该在那里看到 URL,并且可以单击它。如果这分解为原点,那么是的,如果可能的话,在 otherbox 上设置 jsonp 响应并使用 jsonp
  • 是的,你有同源问题

标签: jquery json getjson same-origin-policy


【解决方案1】:

是的,不同的子域将被视为跨域请求 (http://en.wikipedia.org/wiki/Same_origin_policy#Origin_determination_rules)。

但是,您应该可以将 $.ajax 与 dataType:"jsonp": 一起使用:

$.ajax({
 dataType: "jsonp",
 url: "http://otherbox.ourcorp.ourdomain.com/feed",
 success:function(json) {
   storeDataFeed(json); //<----json is null
 }
});

【讨论】:

  • 谢谢。您知道提供 json 的服务器是否需要任何额外的配置来以这种方式提供数据?
  • 你需要一些额外的配置来支持 jsonp
  • 不,我不这么认为。 'JSONP' 只会更改请求,使其在服务器上显示为来自脚本标记的请求。
  • 不幸的是,我相信 lngs 是正确的——刚刚学会了艰难的道路。 json 需要返回一些额外的数据,而不仅仅是原始的 json 提要。不过感谢您的帮助。
  • 您可能需要服务器将响应包装在回调中(即:myCallback({json:data})),然后将此函数的名称添加为 ajax 上的 'jsonpCallback' 参数请求(即:jsonpCallback:'myCallback')。更多关于 jsonp 的信息:en.wikipedia.org/wiki/JSONP
猜你喜欢
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
相关资源
最近更新 更多