将 $.getJSON() 与同一子域上的机器一起使用?

Posted

技术标签:

【中文标题】将 $.getJSON() 与同一子域上的机器一起使用?【英文标题】:using $.getJSON() with machine on same subdomain? 【发布时间】: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 是的,你有同源问题 【参考方案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

以上是关于将 $.getJSON() 与同一子域上的机器一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

将 JQuery getJSON 与包含的其他 JavaScript 一起使用会产生 ReferenceError

尝试将 Google Places API 与 JQuery 的 getJSON 函数一起使用

将子域与 Amazon EC2 公有 DNS 地址一起使用?

如何将 robots.txt 与 gitlab 和 apache + 子域一起使用?

无法将 Amazon 负载均衡器与 Cloudflare 上的子域关联

如果 cookie 设置为同一域上的所有子域,则删​​除 cookie 不起作用