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

Ajax 我可以在从该端口加载的脚本文件的不同端口上使用XMLHttpRequest吗?,ajax,xmlhttprequest,cross-domain,Ajax,Xmlhttprequest,Cross Domain,我有一个使用XMLHttpRequest(实际上是jQuery)的网站。我还有另一个站点在同一台服务器上运行,它提供一个脚本文件,使XHR请求返回到该站点,即 包括 <script src="http://mysite:9000/otherscript.js"></script> $.ajax({ url: 'http://mysite:9000/ajax/stuff' }); 问题是——这行不通。来自加载脚本的AJAX请求完全失败,没有错误消息。据我所知,这

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

包括

<script src="http://mysite:9000/otherscript.js"></script>
$.ajax({
    url: 'http://mysite:9000/ajax/stuff'
});

问题是——这行不通。来自加载脚本的AJAX请求完全失败,没有错误消息。据我所知,这是旧的同源政策。鉴于我控制着这两个网站,我能做些什么来让它工作吗?“document.domain”技巧似乎对XMLHttpRequest没有作用。

没有-不能用XHR实现这一点。相同的域策略在那里是非常严格的-相同的主机,相同的端口,相同的协议。很抱歉您必须使用其他技巧(iFrame、标题操纵等)才能使其正常工作。

您可以通过添加
访问控制允许源文件
标题来实现这一点

如果您使用的是PHP

header("Access-Control-Allow-Origin: http://example.com");
或者在Node.js中

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

这应该对你有好处。它总是对我有用。

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

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


在我的XMLHttpRequest中,我使用“SimpleProxy.php”代替了“”,这有效地将请求放在了与我的.js代码相同的域上。

如果您已经签署了javascript,那么您可以在FF上执行此操作。有关示例,请参阅和。有jQuery和dojo插件可以很好地包装这些东西。这里有一个jQuery插件可以包装这些东西-我已经看到了其他几个插件,但现在还没有找到它们:window.name插件看起来很有希望,但不幸的是它也失败了(因为您控制这两个站点,所以也可以执行JSONP(请参阅)。jQuery本机支持这一点-您只需让服务器吐出JSONP(您没有指定服务器技术)。请求实际上是发出的,“只是”您的源站在未启用的情况下无法读取响应。