【发布时间】:2012-02-02 04:31:08
【问题描述】:
我正在测试本地主机上的 javascript 代码。此文件需要来自远程服务器的 JSON 格式的数据。当我直接点击 JSON url 时,我得到了数据,但是在 javascript 中,我得到了空响应。
可能是什么原因?我正在使用 jquery post 方法来获取数据。
【问题讨论】:
标签: javascript jquery ajax cross-site
我正在测试本地主机上的 javascript 代码。此文件需要来自远程服务器的 JSON 格式的数据。当我直接点击 JSON url 时,我得到了数据,但是在 javascript 中,我得到了空响应。
可能是什么原因?我正在使用 jquery post 方法来获取数据。
【问题讨论】:
标签: javascript jquery ajax cross-site
出于安全原因,您无法使用 JavaScript 访问来自不同域的任何资源。 jQuery 对此无能为力,但有一些方法可以实现这一点,例如 JSONP 或 YQL。
看看这个使用YQL跨域AJAX请求的快速提示。
【讨论】:
$.post 是 ajax 方法,不能使用 ajax 方法访问不同来源的数据。
详情请见the jQuery docs:
由于浏览器安全限制,大多数“Ajax”请求都受制于 同源政策;请求无法成功检索 来自不同域、子域或协议的数据。
【讨论】:
您应该研究一下使用 JavaScript 设置的保护措施。这是同源政策。基本上,这意味着如果您想对来自与您所在页面不同来源的服务器的数据执行 XmlHttpRequest,则不能,除非您跳过箍。
查看 JSON-P 或 jQuery 的方法来克服这个问题。
【讨论】:
正如其他人所说,您不能使用 AJAX 访问远程服务器。您必须使用 JSONP。如果您无法控制其他服务器,或者其他服务器不提供 JSONP,则您必须使用代理。
用 PHP 写一个真的很容易。 http://www.betavine.net/bvportal/blog/view.html?blogId=101&postId=ff8080811afe49d3011afe4bb5de0003
<?
ob_start();
$url = $_REQUEST['url'];
$curl_handle = curl_init($url);
curl_setopt($curl_handle, CURLOPT_HEADER, 0);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, "Owen's AJAX Proxy");
$content = curl_exec($curl_handle);
$content_type = curl_getinfo($curl_handle, CURLINFO_CONTENT_TYPE);
curl_close($curl_handle);
header("Content-Type: $content_type");
echo $content;
ob_flush();
?>
【讨论】: