javascript - javascript 中的 reponseXML 和 loadXML 有什么区别?

标签 javascript xml ajax internet-explorer

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

相关文章:

xml - 在 shell 脚本中需要帮助以查找和替换 xml 文件中的值

javascript - 如何在 FLASK 中使用 ajax 发布数据后渲染模板?

javascript - AJAX接收多个数据

javascript - ajax调用没有命中断点,但继续成功函数

javascript - 当输入文本值更改时,我可以更改按钮文本吗?

javascript - 动态数组上的 onkeyup 事件

javascript - 如何在节点中同步做事

javascript - 结构中的 samplerCube 导致 GL_INVALID_OPERATION

python - 使用 PYTHON 将 CSV 文件转换为 XML 文件

java - 服务调用没有任何反应