我的问题完全集中在Microsoft(Trident)浏览器上。 reponseXML和loadXML有什么区别?显示以下两个代码:
方法1:
var xmlObj = new ActiveXObject("Msxml2.DOMDocument");
xmlObj.async = false;
xmlObj.load('/files/xml/books.xml');
方式2:
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将为第二个方法返回2(ajax调用),并且将为第一个方法返回0。
最佳答案
使用这两种API可能遇到的唯一区别是,在一种情况下指定MSXML2而不是另一种情况下要处理的MSXML版本。通常,除非您执行大量XPath或XSLT,否则不应看到任何明显的影响。
至于那些特定的代码段,它们是完全不同的。尽管您指定send()
以方式2同步执行,但onreadystatechanged
事件将触发多次,因此您还应在抓取request.readyState == 4
之前检查responseXML
。
就是说,因为它是同步的,所以您根本不需要使用onreadystatechanged
,因为send()
仅在请求完成后才返回,因此您可以在下一行抓住request.responseXML
。
我还应该提到,由于您谈论的是无效XML,因此这两种方法的错误情况都是相同的。两者都不会为无效的XML引发异常-您将获得一个非零的xmlObj.parseError.errorCode
值。