2009-11-19 14 views
10

我有网站使用XMLHttpRequest(实际上是jQuery)。我还有另一个站点在同一台服务器上运行,它提供一个脚本文件,使XHR请求返回到该站点,即。我可以在从该端口加载的脚本文件的不同端口上使用XMLHttpRequest吗?

http://mysite:50000/index.html包括

<script src="http://mysite:9000/otherscript.js"></script> 

http://mysite:9000/otherscript.js包括

$.ajax({ 
    url: 'http://mysite:9000/ajax/stuff' 
}); 

的问题是 - 这是行不通的。来自加载脚本的AJAX请求只会失败,并且不会显示错误消息。从我所能找到的这是旧的同源起源政策。鉴于我控制了这两个网站,我能做些什么来完成这项工作? “document.domain”技巧似乎没有为XMLHttpRequest做一件事。

回答

10

Nope-不能XHR做到这一点。相同的域策略在此非常严格 - 相同的主机,相同的端口,相同的协议。抱歉!你必须诉诸其他技巧(iframes,标题操作等)才能使其工作。

+0

什么是“标题操纵”把戏? – EMP 2009-11-20 00:05:54

+0

如果您已经签名了javascript,您可以在FF上执行此操作。 – bmargulies 2009-11-20 00:13:14

+2

见http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/和http://orensol.com/2009/06/07/cross-domain-ajax-calls-and例如,图像通信如何进行。有jQuery和dojo插件很好地包装了这个东西。 – nitzmahone 2009-11-20 00:13:25

10

您可以通过添加Access-Control-Allow-Origin头做到这一点。 如果你正在使用PHP

header("Access-Control-Allow-Origin: http://example.com"); 

或node.js中

response.writeHead(200,{'Access-Controll-Allow-Origin':' http://example.com'}); 

这必须为你做的伎俩总是对我的作品

0

我只是解决了类似的问题,用PHP服务我目前正在通过使单线代理PHP页面,SimpleProxy.php玩弄(不知道PHP的解决方案是如何相关的是这种直接的,但...):

<?php 
echo file_get_contents('http://localhost:4567'); 
?> 

在我的XMLHttpRequest我代替“http://localhost:4567”,从而有效地把在同一个域作为我的.js代码请求使用“SimpleProxy.php”。

相关问题