我的问题完全集中在 Microsoft (Trident) 浏览器上。 reponseXML 和 loadXML 有什么区别?显示以下两个代码:
方式一:
var xmlObj = new ActiveXObject("Msxml2.DOMDocument");
xmlObj.async = false;
xmlObj.load('/files/xml/books.xml');
方式二:
var request = new ActiveXObject("Microsoft.XMLHTTP");
request.open("GET", "files/xml/books.xml", false);
request.onreadystatechange = function() { var xmlObj = request.responseXML; };
request.send(null);
在上面的代码片段中,两种情况下的变量 xmlObj 都是 xml 文档。但是它们之间有什么区别吗?因为我试图在没有 ajax 调用的情况下做一些事情, 通过使用前面的代码片段,但它不起作用,尽管 xmlObj 具有预期的 xml 文件内容。请帮忙。谢谢。
编辑:
我发现了不同之处。让我们考虑 books.xml 是:
<books>
<book>
<a/><b/>
</book>
<book>
<a/><b/>
</book>
</books>
现在 xmlObj.getElementsByTagName('a').length 将为第二个方法(ajax 调用)返回 2,为第一个方法返回 0。
最佳答案
您在使用这两个 API 时可能会遇到的唯一区别是您处理的 MSXML 版本,因为您在一种情况下指定了 MSXML2,而在另一种情况下则没有。通常,除非您执行大量 XPath 或 XSLT,否则您不会看到任何明显的效果。
然而,至于那些特定的代码片段,它们是完全不同的。尽管您指定 send()
以方式 2 同步执行,但 onreadystatechanged
事件会触发多次,因此您还应该检查request.readyState == 4
在获取 responseXML
之前。
也就是说,因为它是同步的,所以您根本不需要使用 onreadystatechanged
,因为 send()
只会在请求完成后返回,因此您可以直接获取request.responseXML
在下一行。
我还应该提一下,因为您谈到了无效的 XML,两种方法中的错误情况是相同的。两者都不会为无效的 XML 抛出异常 - 您将得到一个非零的 xmlObj.parseError.errorCode
值。
关于javascript - javascript 中的 reponseXML 和 loadXML 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10257027/