我使用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。
答案 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数据类型
请记住在打开之后和发送请求之前将XML文档解析为“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