一尘不染

使用JQuery / PHP的跨域Ajax请求

php

帮助,如果您可以-

情况:

http://foobar.com包含一个远程托管的Javacript文件(http://boobar.com/stuff.js)。

目标是从foobar.com上的远程托管php脚本中获取警报

我在stuff.js中尝试了以下代码:

$.ajax({
  type: "GET",
  url: "http://www.boobar.com/script.php?callback=?",
  dataType: 'jsonp',
  success: function(result) { alert(result); }
});

没运气。

$.getJSON("http://www.boobar.com/script.php?jsonp=?",
  function(data) { alert(data); }
);

也没有运气。

在php端,我尝试了以下两种方法:

return json_encode(array(0 => 'test'));

echo json_encode(array(0 => 'test'));

在Firefox中,出现安全错误。我了解它认为我违反了安全模型。但是,根据jquery文档,我应该能够完成此操作。


阅读 237

收藏
2020-05-29

共1个答案

一尘不染

该错误似乎是Same Origin
Policy的
一项安全功能:为简化起见,您只能在原始服务器(http://foobar.com)上对内容进行AJAX请求。解决此问题的一种方法是在原始服务器上创建一个简单的外观,例如:

 <?php
 // this file resides at http://foobar.com/getstuff.php
 echo file_get_contents('http://www.boobar.com/script.php?callback=?'
          . $possibly_some_other_GET_parameters );
 ?>

然后,从foob​​ar.com,可以使一个AJAX请求http://foobar.com/getstuff.php(这反过来又使一个HTTP
GET请求 从您的Web服务器boobar.com并将其发送回浏览器)。

对于浏览器,请求将转到原始服务器,并且被允许(浏览器无法知道响应来自幕后其他地方)。

注意事项:

2020-05-29