responseXML始终为null

时间:2010-09-23 18:25:47

标签: 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);

responseXML 始终为null,我已经尝试过来自不同域的多个网址。我也异步尝试过,结果相同。始终正确返回 responseText ,没有任何问题。

我的目标是获取 responseXML.documentElement

感谢您的帮助。

EDIT -----------
这个javascript代码是从Greasemonkey用户脚本执行的,我把它的来源与请求的url相同。此外,我尝试从firebug控制台执行,再次确保原始策略。两者都有相同的错误 得讨厌javascript。

9 个答案:

答案 0 :(得分:23)

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

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

xmlhttp.overrideMimeType('application/xml');
在发送请求之前

强制将响应作为XML进行交互。如果响应不是有效的XML,那么您只能获得null

答案 1 :(得分:19)

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

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

这样的事情:

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlhttp.responseText, "application/xml");

答案 2 :(得分:8)

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

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

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

答案 3 :(得分: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>

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

答案 4 :(得分:1)

这几个小时都搞错了,终于想出了弄乱我的愚蠢的小错误......

如果您像我一样,您希望将JavaScript代码保存在外部“.js”文件中。

因此,使用xmlhttp.open(“GET”,“yourxmlfile.xml”,false)将始终搜索 XML文件RELATIVE到HTML文档,即使代码在外部JavaScript文件。

如果responseText返回null,则无法在指定的路径位置找到本地文件。 如果async设置为true,则将创建文件,响应文本将携带空XML文档的内容。

示例:

xmlDoc = xmlhttp.responseText; //字符串数据类型

        or

xmlDoc = xmlhttp.responseXML; // XML数据类型

  • folder1 = folder2,index.html。
  • folder2 = index.js,yourxmlfile.xml。
  • HTML的路径=“folder2 / yourxmlfile.xml”,而不是“yourxmlfile.xml”。

请记住在打开之后和发送请求之前将XML文档解析为“text / xml”。

示例:

  • xhttp.overrideMimeType( '文本/ XML');
  • Chrome:xmlDoc =(new DOMParser())。parseFromString(xmlDoc,“text / xml”);

答案 5 :(得分:0)

对我来说这是一个简单的问题。我的xml / php文件中存在语法错误。 当我在浏览器中查看文件时,浏览器没有检测到任何错误。

确保XML文档中的元素已正确关闭!

答案 6 :(得分:0)

格式错误的XML 任何种类都会导致此问题。例如,我有一个属性renderer(没有="something"),该属性无效并导致DOMParser - 由XMLHTTPRequest调用 - 来阻塞。因此load事件将包含文本响应,但不包含XML。

答案 7 :(得分:0)

我很难找到正确的xml示例。如果为空,请尝试使用XML验证程序。对我来说,<root>元素丢失了。

<root>
<info><p>Array
(
)
</p>
</info>
<itemData>{"id":"40","client_id":"1","nameUnique":"Lore ipsum","description":null,"userComment":null,"last_modified":"2018-12-15 02:48:57"}    </itemData>
</root>

答案 8 :(得分:0)

我只是遇到了同样的问题。

net5.0

在代码中添加responseType“ document”行以解决此问题。在打开和发送方法之间切换。

参考:(请参阅用法https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/HTML_in_XMLHttpRequest