Jquery JSON:如何进行跨域JSON调用
我尝试在本地网络中运行以下jquery代码Jquery JSON:如何进行跨域JSON调用,jquery,json,cross-domain,Jquery,Json,Cross Domain,我尝试在本地网络中运行以下jquery代码 $.ajax({ type: "GET", url: "http://SomeSite/MyUrl/", cache: false, data: { ... }, dataType: "json", error: function (xhr, status, error) { ... }, suc
$.ajax({
type: "GET",
url: "http://SomeSite/MyUrl/",
cache: false,
data: { ... },
dataType: "json",
error: function (xhr, status, error) {
...
},
success: function (json) {
...
});
在“SomeSite”成为本地主机之前,一切正常。我指的是从页面下载的同一台服务器
但当“SomeSite”是另一个(不是本地主机)网络站点时,请求看起来会挂起。不调用“error”或“success”回调函数。我怎样才能使这个代码工作
提前谢谢你 您可以尝试jsonp请求查看跨域请查看。如果远程服务器支持JSONP,那么我想您可以使用回调。实际上您只能调用GET。
没有通过跨站点脚本进行POST、PUT、DELETE或PATCH的防故障方法。
唯一可行的方法是手写代理。由于同一原产地政策,您不能这样做。一种解决方法是使用flashajaxjquery插件,该插件使用flashmovie绕过同源策略
其他选项是通过您自己的域代理请求或使用JSONP。我也有同样的问题。试图从服务器获取json,但我无法访问(=>无JSONP) 我找到了将php代理添加到服务器并对该文件进行ajax调用的方法。
“任何要传递到远程URL资源的GET参数都必须在此参数中进行URL编码。” proxy.php(来自Ben Alman的文件)位于您的域中
备选方案(我发现这是第二个最佳方案):
您是否有“某个站点”的服务器访问权限,还是第三方
- 如果您有访问权限,可以在其上启用
。以最简单的形式(数据不区分会话),只需添加标题:CORS
Access Control Allow Origin:
- 如果您没有访问权限,您知道它是否支持
?这通常涉及在URL中至少传递一个JSONP
参数。(当然,如果您有访问权限,也可以添加回调
支持。)JSONP
- 如果您无权对“SomeSite”进行更改,并且它既不支持
也不支持CORS
,则您可以使用JSONP
作为代理。它确实支持YQL
和CORS
,甚至可以翻译数据格式,选择部分数据,等等。JSONP
(请注意,YQL尊重
,因此如果它是限制自动访问的第三方网站,您可能仍然运气不佳。)robots.txt
我在尝试从Web服务加载json时遇到了同样的问题。我发现所有的JS黑客都没有真正起作用,我想知道如果我想从我自己控制(和信任)的服务器加载数据,为什么还要这么做。然后我了解到服务器的响应头在整个问题中起着至关重要的作用。当我将上面提到的头添加到我的Web服务的http响应时,问题就解决了。我也遇到了类似的问题。我尝试了Symba引用的代理脚本,但由于某种原因,它无法在我的机器上运行。在我的例子中,我试图向JBoss上托管的应用程序发送请求,就像在同一台主机上一样。不知何故,我所拥有的JBoss版本没有办法修改响应头,因此我可以包含“访问控制允许源代码”、“*” 我使用上面Symba的方法解决了这个问题,但是我没有使用Ben Alman的脚本,而是在Apache服务器上设置了一个反向代理,请参见。
默认情况下,Apache仍然存在跨域问题。通过设置响应头“Access Control Allow Origin”、“*”,请参阅,问题就消失了 您在哪个浏览器上测试了它?顺便说一下,您可以使用--disable web security标志启动chrome,使其放弃相同的权限策略。通过这种方式,您还可以使用chrome的网络选项卡检查作为响应一部分的标题。这在调试时帮了我很大的忙。这个替代方案很有魅力。谢谢但是代理php总是失败,有关于未定义的可选参数的php通知,json中的内容变量总是空的。hmoe和wp上的这些链接每一组都指向不同的网站应该做什么?“wp”=维基百科页面。“家”是这个东西的主页。你的第二个家链接是youtube上的一个视频,歌词是Iassume@AaA当前位置主页似乎失效了,有人将其删除并在那里重定向。我将用关于JSONP的最大问题来代替它。
$.ajax({
type: 'GET',
url:'proxy.php?url=http://anyDomain.com?someid=thispage',
dataType: "json",
success: function(data){
// success_fn(data);
},
error: function(jqXHR, textStatus, errorThrown) {
// error_fn(jqXHR, textStatus, errorThrown);
}
});