我可以在与该端口加载的脚本文件不同的端口上使用XMLHttpRequest吗?

时间:2009-11-19 23:50:47

标签: ajax xmlhttprequest cross-domain

我的网站使用XMLHttpRequest(实际上是jQuery)。我还在同一台服务器上运行另一个站点,该站点提供一个脚本文件,使XHR请求返回到该站点,即。

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做任何事情。

3 个答案:

答案 0 :(得分:10)

不能 - 不能用XHR做到这一点。同域策略在那里是非常严格的 - 相同的主机,相同的端口,相同的协议。抱歉!您将不得不诉诸其他技巧(iframe,标题操作等)来使其发挥作用。

答案 1 :(得分:10)

您可以通过添加Access-Control-Allow-Origin标题来完成此操作。

如果您使用的是PHP

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

或在Node.js中

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

这应该可以帮到你。它总是适合我。

答案 2 :(得分:0)

我刚刚用PHP服务解决了一个类似的问题我现在正在玩(不确定PHP解决方案与此直接相关,但......)通过创建单行代理PHP页面,SimpleProxy .PHP:

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

在我的XMLHttpRequest中,我使用了&#39; SimpleProxy.php&#39;代替&{39; http://localhost:4567&#39;,它有效地将请求放在与我的.js代码相同的域中。