解析Ajax返回的XML时出错

Error parsing returned XML by Ajax

本文关键字:出错 XML Ajax 返回 解析      更新时间:2023-09-26

我正在尝试通过ajax请求读取http响应。作为回显服务器,我在主机上使用一个简单的套接字。它返回包含XML的http-response。就像这样:

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解析错误:no element found位置:moz-nullprincipal:{62148931-591e-41d7-8625-c86149386fc4}第1行,第1列:

如果我在FF, Chrome和IE中使用地址栏请求它,我可以读取结果XML而没有任何错误,但是这个Ajax调用返回错误。似乎我错过了一些与ajax工作。你能帮我一下吗?谢谢你。

如果我正确地阅读了您的问题,您正在从本地文件加载一些带有打开文件的HTML,并将其指向在本地主机上运行的套接字服务器。FireFox会认为这些是不同的域。HTML脚本需要来自与所请求的XML相同的本地主机服务器。

换句话说,出于安全原因,浏览器将只允许对"相同来源"的AJAX请求。这是一个术语(对于大多数浏览器)意味着"相同的协议,相同的主机,相同的端口"。

http://localhost:8090/与http://localhost或https://localhost的来源不同(注意https和http),也不是从机器上加载的HTML文件的来源相同(如file:///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。