使用JQuery/PHP进行跨域Ajax请求

lew*_*sid 4 javascript php ajax jquery

帮助,如果你能 -

情况:

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); }
});
Run Code Online (Sandbox Code Playgroud)

没运气.

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

也没有运气.

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

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

echo json_encode(array(0 => 'test'));
Run Code Online (Sandbox Code Playgroud)

在Firefox中我收到安全错误.我知道它认为我违反了安全模型.但是,根据jquery文档,我应该能够做到这一点.

Pis*_*3.0 8

该错误似乎是同源策略的安全功能:为了简化,您只能对原始服务器(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 );
 ?>
Run Code Online (Sandbox Code Playgroud)

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

对于浏览器,请求进入原始服务器,并且被允许(浏览器无法知道响应来自场景后面的其他地方).

注意事项:

  • foob​​ar.com上的PHP配置必须allow_url_fopen设置为"1".虽然这是默认设置,但某些服务器已将其禁用.
  • 对www.boobar.com的请求来自foobar.com 服务器,而不是浏览器.这意味着不会将任何cookie或用户身份验证数据发送到www.boobar.com,无论您将哪些内容放入请求URL(" $possibly_some_other_GET_parameters").