我试图通过ajax请求读取http响应。作为echo-server,我在主机上使用一个简单的套接字。它返回带有XML的http响应。就像这样:
得到了它。等待下一个......HTTP / 1.1 200 OK
日期:2011年11月18日星期五03:16:22 GMT
内容长度:94
连接:关闭
内容类型:text / xml
作为客户,我使用以下ajax请求:
<html>
<head>
<script type="text/javascript" src="jquery-1.5.1.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
url: "http://localhost:8090/",
dataType: "text",
complete: function(jqXHR, textStatus){
alert(textStatus);
alert(jqXHR.responseText);
}
});
});
</script>
</head>
<body>
</body>
</html>
执行此脚本后,我在FF中收到以下错误:
XML解析错误:找不到元素位置:moz-nullprincipal:{62148931-591e-41d7-8625-c86149386fc4}第1行,第1列:
如果我在FF,Chrome和IE中使用地址栏请求它,我可以读取生成的XML而没有任何错误,但是这个Ajax调用会返回错误。似乎我错过了使用ajax的东西。你能帮帮我吗? 谢谢。
答案 0 :(得分:2)
如果我正确地阅读了您的问题,您将从本地文件加载一些带有Open File的HTML,并将其指向在localhost上运行的套接字服务器。 FireFox会将这些视为不同的域名。 HTML脚本需要来自与请求的XML相同的localhost服务器。
换句话说,出于安全原因,浏览器只允许AJAX请求“相同的来源”。这个术语(对于大多数浏览器)意味着“相同的协议,相同的主机,相同的端口”。
http://localhost:8090/与http://localhost或https://localhost的来源不同(请注意https与http),也不是与您机器上加载的HTML文件相同的来源(如文件:///my/directory/test.html)
您可以尝试将以下响应标头添加到XML响应中:
HTTP/1.1 200 OK
Date: Fri, 18 Nov 2011 03:16:22 GMT
Content-Length: 94
Connection: close
Content-Type: text/xml
Access-Control-Allow-Origin: *
如果您的浏览器支持跨源资源共享(CORS),则上述“Access-Control-Allow-Origin”标头应允许从其他域访问XML。