1

我正在测试本地主机上的 javascript 代码。此文件需要来自远程服务器的 JSON 格式的数据。当我直接点击 JSON url 时,我得到了数据,但在 javascript 中,我得到了空响应。

可能是什么原因?我正在使用 jquery post 方法来获取数据。

4

6 回答 6

2

由于安全原因,您无法使用 JavaScript 访问来自不同域的任何资源。jQuery 对此无能为力,但有一些方法可以实现这一点,例如JSONPYQL.

看看这个关于跨域AJAX请求的快速提示YQL

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/

于 2012-02-01T18:20:27.173 回答
1

$.post是一种 ajax 方法,您不能使用 ajax 方法来访问来自不同来源的数据。

有关详细信息,请参阅jQuery 文档

由于浏览器安全限制,大部分“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议成功检索数据。

于 2012-02-01T18:15:41.333 回答
1

您应该研究一下使用 JavaScript 设置的保护措施。这是同源政策。基本上,这意味着如果您想对来自与您所在页面不同来源的服务器的数据执行 XmlHttpRequest,则不能,除非您跳过箍。

查看 JSON-P 或 jQuery 的方法来克服这个问题。

于 2012-02-01T18:15:54.317 回答
1

出于安全考虑(请参阅CORS ),从不同域请求数据受到限制,特别是为了防止 XSS(跨站点脚本)攻击。

您可以尝试几种替代方法:

  • JSONP是一个选项,如果其他域支持它
  • 这是另一个相关的问题

您可以使用YQL从另一个域请求资源。

除了这些替代方案之外,您始终可以创建服务器代理并让该代理查询域并返回结果。

于 2012-02-01T18:25:28.917 回答
1

您请求的服务器必须支持JSONPCORS

否则,这是不可能的。

也不能使用 发出 JSONP 请求POST,它必须是GET

于 2012-02-01T18:25:31.633 回答
0

正如其他人所说,您不能使用 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();
?>
于 2012-02-01T18:28:23.347 回答