Ajax解析返回的XML时出错

时间:2011-11-18 03:26:10

标签: javascript ajax http

我试图通过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的东西。你能帮帮我吗? 谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

http://localhost:8090/http://localhosthttps://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。