2012-02-01 68 views
1

我正在测试一个本地主机上的JavaScript代码。该文件需要来自JSON格式的远程服务器的数据。当我直接点击JSON网址时,我得到的数据,但在JavaScript中,我得到空回应。

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

回答

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(); 
?> 
1

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

详见the jQuery docs

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

1

有一个设置JavaScript的保护措施,你应该看看。这是相同的来源政策。基本上,这意味着如果您想为来自服务器的数据执行XmlHttpRequest,而这个服务器与您所在的页面不是同一个来源,那么除非您跳过这些环节,否则您不能这样做。

查看JSON-P或jQuery用于克服此问题的方法。

1

从不同的域请求数据被限制为一个安全的关注(参见CORS),具体地防止XSS(跨站点脚本)攻击。

你可以试试几个选择:

  • JSONP是一个选项,如果在其他领域支持它
  • here's另一个相关的问题

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

除了这些替代方法,您可以随时创建一个服务器代理并让该代理查询域并返回结果。

1

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

否则,这是不可能的。

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

相关问题