【问题标题】:Error parsing returned XML by Ajax解析 Ajax 返回的 XML 时出错
【发布时间】:2011-11-18 03:26:10
【问题描述】:

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

HTTP/1.1 200 正常
日期:格林威治标准时间 2011 年 11 月 18 日星期五 03:16:22
内容长度: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 的东西。你能帮我解决这个问题吗? 谢谢。

【问题讨论】:

  • 您是否从客户端脚本来自的同一个域请求 XML?另外,尝试使用“xml”的数据类型,而不是“文本”。
  • 是的,所有活动都在我的本地主机上运行。从“text”更改为“xml”“dataType”值没有帮助(
  • “本地主机”与同一个域不同;请参阅下面的答案。

标签: javascript ajax http


【解决方案1】:

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

换句话说,出于安全原因,浏览器将只允许“同源”的 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。

【讨论】:

  • 你想要完成什么?如果您只是想尝试 AJAX,请使用真正的 HTTP 服务器(如 Tomcat 或 Apache),这样您就可以从同一个地方同时提供这两个项目。否则,您需要执行 JSONP 或脚本代理之类的操作,它们都不允许您发送原始 XML。
  • 太棒了!您关于附加标头的建议解决了我的问题 :) 实际上,我正在尝试模拟我的 C++ 应用程序和在浏览器上下文中某处运行的一些 Web 应用程序之间的通信过程。非常感谢您的帮助! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
相关资源
最近更新 更多