繁体   English   中英

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

[英]Cross Domain Ajax Request with JQuery/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文档,我应该能够做到这一点。

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

然后,从foobar.com,您可以为http://foobar.com/getstuff.php发出一个AJAX请求(它会从您的Web服务器boobar.com发出HTTP GET请求并将其发送回浏览器) 。

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

注意事项:

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

您可以使用脚本标记和json以异步方式从另一台服务器获取数据:

<script type="text/javascript" src="http://somesite.com/path/to/page/"></script>

您可以使用它来动态加载远程javascript(通过创建新的脚本元素并设置src属性,然后加载到DOM中),这可以设置变量。 但是,您需要真正信任远程站点,因为JS将在没有任何先决条件的情况下进行评估。

有一个名为window.name transportwindow.name method ,该window.name method使用一般的浏览器错误(不确定这实际上是否是一个bug)。 您通过iFrame发出请求,并且加载的页面将您需要的信息放入JavaScript窗口对象的“name”属性中。

此方法使用“blank.htm”,因为它首先导航到目标页面,然后返回到blank.htm页面以克服“相同的原始策略”限制。

Dojo已实现此功能,您可以在此处找到更详细的说明。

此外,我已经在我编写的库中实现了基于此方法的跨域XMLHttpRequest对象,可以在此处找到。

您可能无法使用该库,因为它需要1或2个额外的库,可在此处找到。

如果你需要进一步帮助以你的风格实现它,我会尽力做到最好。

jQuery .ajax也有一个设置'crossDomain'。

http://api.jquery.com/jQuery.ajax/

crossDomain (default: false for same-domain requests, true for cross-domain requests)
Type: Boolean
If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for example, server-side redirection to another domain. (version added: 1.5)

这个怎么样 !! 使用php代理。

使用PHP进行跨域AJAX调用http://www.phpfour.com/blog/2008/03/cross-domain-ajax-using-php/

所以我最终做了,因为它只是一个GET - 没有数据需要检索 - 我使用JQuery创建一个隐藏的iframe,其URL包括我想要传递的变量设置为源。 工作就像一个魅力。 对所有提出反馈的人 - 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM