将 $.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 + 子域一起使用?