JSON:如何进行跨域JSON调用

And*_*rko 11 jquery json cross-domain

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

 $.ajax({
     type: "GET",
     url: "http://SomeSite/MyUrl/",
     cache: false,
     data: { ... },
     dataType: "json",

     error: function (xhr, status, error) {
                                    ... 
     },
     success: function (json) {
                                    ...
     });
Run Code Online (Sandbox Code Playgroud)

一切正常,直到"SomeSite"是localhost.我的意思是从下载页面的同一台服务器.

但是当'SomeSite'是另一个(不是localhost)网站时,它看起来像请求挂起.不是"错误",也不是"成功"回调函数.如何使此代码有效?

先感谢您!

Cla*_*diu 16

我遇到过同样的问题.试图从服务器获取json我没有访问权限(=>没有JSONP).

我发现http://benalman.com/projects/php-simple-proxy/将php代理添加到您的服务器并对此文件执行ajax调用.
"要传递给远程URL资源的任何GET参数都必须在此参数中进行urlencoded."

$.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);
   }
});
Run Code Online (Sandbox Code Playgroud)

其中proxy.php(来自Ben Alman的文件)托管在您的域中



替代方案(我发现它是第二好的):http:
//james.padolsey.com/javascript/cross-domain-requests-with-jquery/


hip*_*ail 7

你有服务器访问'SomeSite',还是第三方?

  • 如果您有访问权限,则可以启用CORS wp,home.在最简单的形式(数据不是会话敏感),只需添加标题:Access-Control-Allow-Origin: *

  • 如果你没有访问权限,你知道它是否支持JSONP wp,那么?这通常涉及至少传递callbackURL中的参数.(当然,如果您有权访问,也可以添加JSONP支持.)

  • 如果您无权更改"SomeSite"并且它既不支持CORS也不支持JSONP,则可以使用YQL wp,home作为代理.它确实支持CORSJSONP甚至可以转换数据格式,选择数据的某些部分等.
    (请注意,YQL尊重robots.txt所以,如果它是限制自动访问的第三方网站,您可能仍然不幸.)


jim*_*imy 1

您可以尝试 jsonp 请求http://api.jquery.com/jQuery.ajax/查看跨域