【发布时间】:2011-09-28 20:40:06
【问题描述】:
我正在尝试使用 AJAX 从多个服务器访问资源,但我遇到了这个问题:
XMLHttpRequest cannot load http://first.mydomain.com. Origin http://second.mydomain.com is not allowed by Access-Control-Allow-Origin.
使用以下代码
for ( i in domains )
{
var url = 'http://'+domains[i]+'/mgmt/json/queue_status.php';
requests[i]=new request(url);
break;
}
function request(url)
{
var queues = {};
http_request = new XMLHttpRequest();
http_request.open("GET", url, true, 'username', 'password');
http_request.onreadystatechange = function () {
var done = 4, ok = 200;
if (http_request.readyState == done && http_request.status == ok) {
queues = JSON.parse(http_request.responseText);
var queuesDiv = document.getElementById('queues');
print_queues(queues, queuesDiv);
}
}
http_request.send(null);
}
我已将以下内容添加到请求的响应页面中。
header('Access-Control-Allow-Origin: *');
我也尝试过明确命名请求者,但没有成功。
谢谢
PS:我确信上面的代码并不完美,但仅在尝试请求主机服务器的资源时运行良好。
【问题讨论】:
-
经典。这是因为Same Origin Policy
-
好的,但是有没有办法解决这个问题?
-
是的,通过 JSONP 回调和
<script>标签注入。 -
好的,据我所知,JSONP 允许您通过让浏览器从远程资源 onload 获取 JSON 来避免制作 XHR,但我怎样才能让它在没有只是粗暴地重新加载页面。
标签: php javascript apache xmlhttprequest cross-site