responseXML始终为null

WoF*_*gel 17 javascript ajax xmlhttprequest

我使用firefox 3.6.10和firebug进行调试

所以,这是我的代码:

var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url,false);
xmlhttp.setRequestHeader('Content-Type',  'text/xml');
xmlhttp.send(null);
alert(xmlhttp.responseXML);
Run Code Online (Sandbox Code Playgroud)

responseXML总是为null,我已经尝试过来自不同域的几个URL.我也异步尝试过,结果相同.该responseText的总是正确返回,与它没有任何问题.

我的目标是获取responseXML.documentElement.

谢谢你的帮助.

编辑-----------
这个javascript代码是从Greasemonkey用户脚本执行的,我使其与所请求的URL具有相同的来源.此外,我尝试从firebug控制台执行,再次确保原始政策.两者都有相同的错误.
得讨厌javascript.

Moo*_*Goo 25

除了已经提到的跨域问题之外,还responseXML需要完全有效的XML,并且可能Content-Type在服务器发送的响应头中是正确的.普通网站不太可能满足这些要求中的任何一个.

对于后一个问题,您可以使用

xmlhttp.overrideMimeType('application/xml');
Run Code Online (Sandbox Code Playgroud)

在发送请求之前强制将响应作为XML进行交互.如果响应不是有效的XML,那么你只会得到null.


Ken*_*nny 19

如果我没记错的话,这是firefox的一个已知问题(我之前遇到过同样的问题).

修复是将responseText解析回XML文档,然后使用它.

像这样的东西:

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlhttp.responseText, "application/xml");
Run Code Online (Sandbox Code Playgroud)


hvg*_*des 8

我打赌你违反了相同的原产地政策.

对于XHR,您必须具有相同的协议,域,端口等.因此,如果您在localhost:8080/app上运行应用程序,则无法访问www.cnn.com.

不同的浏览器处理方式不同 我已经看到FF做你所描述的,这是请求似乎正常返回但没有数据......


Mic*_*Mic 5

尝试url直接在浏览器中打开值.你应该得到一些错误信息.
如果您看到解析错误,则可能是您的编码错误,并且您的XML中有一个特殊字符使其无效.

为避免这种情况,您需要确保所有链都已正确编码.

如果它是静态XML文件,则需要在保存时正确设置编辑器编码.完成所有操作(几乎)的编码是UTF-8,它通常是您可以在编辑器设置或保存对话框中选择的属性.

如果它是动态生成的.您的数据,页面和服务器响应也必须正确编码.而你的XML开始于<?xml version="1.0" encoding="UTF-8"?>

您可以先使用非常基本的静态XML进行尝试:

<?xml version="1.0" encoding="UTF-8"?><root>hi</root>
Run Code Online (Sandbox Code Playgroud)

然后逐步添加步骤,使其像你的一样,而不会破坏它.