Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分析Ajax返回的XML时出错_Javascript_Ajax_Http - Fatal编程技术网

Javascript 分析Ajax返回的XML时出错

Javascript 分析Ajax返回的XML时出错,javascript,ajax,http,Javascript,Ajax,Http,我试图通过ajax请求读取http响应。作为echo服务器,我在主机上使用一个简单的套接字。它返回包含XML的http响应。就这样, HTTP/1.1200正常 日期:2011年11月18日星期五03:16:22 GMT 内容长度:94 连接:关闭 内容类型:text/xml 明白了。等待下一个 作为客户机,我使用以下ajax请求: <html> <head> <script type="text/javascript" src="jquery-1.5.1.js"&

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

HTTP/1.1200正常
日期: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> 

$(文档).ready(函数(){
$.ajax({
url:“http://localhost:8090/",
数据类型:“文本”,
完成:函数(jqXHR,textStatus){
警报(文本状态);
警报(jqXHR.responseText);
}        
});
});
执行此脚本后,我在FF中收到以下错误:

XML分析错误:未找到元素位置:moz nullprincipal:{62148931-591e-41d7-8625-c86149386fc4}行号1,第1列:

如果我使用FF、Chrome和IE中的地址栏请求生成的XML,我可以毫无错误地读取它,但是这个Ajax调用返回错误。似乎我在使用ajax时遗漏了一些东西。你能帮我吗?
谢谢。

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

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

与或(注意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),则上面的“访问控制允许源”标题应允许从其他域访问XML。

您是否从客户端脚本来自的同一域请求XML?另外,请尝试“xml”数据类型,而不是“文本”。是的,所有活动都在我的本地主机上运行。将“文本”更改为“xml”‘数据类型’值没有帮助(“本地主机”与同一个域不是一回事;请参见下面的回答。您想实现什么?如果您只是想尝试AJAX,请使用真正的HTTP服务器(如Tomcat或Apache)因此,您可以从同一个位置提供这两个项目。否则,您需要执行JSONP或脚本代理之类的操作,这两种操作都不允许发送原始XML。太好了!您关于附加标题的建议解决了我的问题:)实际上,我试图模拟我的C++应用程序和一些浏览器应用程序中运行的Web应用程序之间的通信过程。非常感谢你的帮助!:)