如何从跨站点获取数据?我正在使用$ .post

时间:2012-02-01 18:13:25

标签: javascript jquery ajax cross-site

我正在测试localhost上的javascript代码。此文件需要JSON格式的远程服务器数据。当我直接点击JSON网址时,我得到了数据,但是在javascript中,我得到空的响应。

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

6 个答案:

答案 0 :(得分:2)

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

使用AJAX查看有关跨域YQL请求的快速提示。

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

答案 1 :(得分:1)

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

有关详细信息,请参阅the jQuery docs

  

由于浏览器安全限制,大多数“Ajax”请求都是主题   同源政策;请求无法成功检索   来自不同域,子域或协议的数据。

答案 2 :(得分:1)

您应该查看使用JavaScript设置的保护措施。这是相同的原产地政策。基本上它意味着如果你想对来自与你所在页面不同的服务器的数据进行XmlHttpRequest,你就不能,除非你跳过篮球。

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

答案 3 :(得分:1)

请求来自不同域的数据作为安全问题受到限制(请参阅CORS),特别是为了防止XSS(跨站点脚本)攻击。

您可以尝试以下几种方法:

  • JSONP是其他域支持的选项
  • here's其他相关问题

您可以使用YQL从其他域请求资源。

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

答案 4 :(得分:1)

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

否则,这是不可能的。

也无法使用POST发出JSONP请求,它必须是GET

答案 5 :(得分: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();
?>