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的文件)托管在您的域中
你有服务器访问'SomeSite',还是第三方?
如果您有访问权限,则可以启用CORS
wp,home.在最简单的形式(数据不是会话敏感),只需添加标题:Access-Control-Allow-Origin: *
如果你没有访问权限,你知道它是否支持JSONP
wp,那么?这通常涉及至少传递callback
URL中的参数.(当然,如果您有权访问,也可以添加JSONP
支持.)
如果您无权更改"SomeSite"并且它既不支持CORS
也不支持JSONP
,则可以使用YQL
wp,home作为代理.它确实支持CORS
和JSONP
甚至可以转换数据格式,选择数据的某些部分等.
(请注意,YQL尊重robots.txt
所以,如果它是限制自动访问的第三方网站,您可能仍然不幸.)