我的问题完全集中在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值。

10-06 11:14