Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery JSON:如何进行跨域JSON调用_Jquery_Json_Cross Domain - Fatal编程技术网

Jquery JSON:如何进行跨域JSON调用

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

我尝试在本地网络中运行以下jquery代码

 $.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:

  • 如果您没有访问权限,您知道它是否支持
    JSONP
    ?这通常涉及在URL中至少传递一个
    回调
    参数。(当然,如果您有访问权限,也可以添加
    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);
   }
});