【问题标题】:Unable to Parse xml DOM (from file) with java script无法使用 javascript 解析 xml DOM(来自文件)
【发布时间】:2011-10-11 10:54:50
【问题描述】:

当我尝试将元素标签从单独的 xml 文件加载到 html 文档中时,我最近开始遇到 javascript 问题。我知道我已正确启用 XMLHttpRequest 或 activeX(取决于 Internet 浏览器),但在获取 xml 文件并打开它以访问它的标签时遇到问题。为了打开文件,我尝试使用:

xhttp.open("GET",filepath,false);
xhttp.send();
xmlDoc=xhttp.responseXML;

代码似乎超过了第一行,但在第二行被绊倒了。我想知道是否有人能够澄清 .send() 的功能,以及服务器权限是否可能是错误的;当这段代码运行时,IE 7/8 它告诉我“访问被拒绝”。

【问题讨论】:

  • 文件路径是否指向另一个域?
  • 文件路径指向与运行此代码的文件位于同一域中的文件。

标签: javascript html xml dom xhtml


【解决方案1】:

确保 ajax 请求从被访问的资源发送到同一个域。

在此处获取您的代码示例,

xhttp.open("GET",filepath,false);
xhttp.send();

您已使用 HTTP 方法 GET 请求资源。仅当根据规范 [1] 在 XHR 对象上调用 send() 方法时,才会触发此请求。如果方法是 GET,send() 的参数将被忽略。

现在一旦创建了 xhr 对象,它会经历不同的状态[2] 例如

  • 未发送(数值 0)
  • 已打开(数值 1)
  • HEADERS_RECEIVED(数值 2)
  • 正在加载(数值 3)
  • 完成(数值 4)

请求被触发的那一刻(即,send() 被调用),xhr 对象将处于 OPENED 状态。

现在,如果我们查看您的代码“xmlDoc=xhttp.responseXML;”的第 3 行,很不清楚您正试图读取内容处于什么状态。阅读内容的最佳方式是在状态达到 4 或 DONE 时

只需修改您的代码,如下所示:

 var xhr = new XMLHttpRequest();
    xhr.open("GET", somefilepath, true);
    xhr.send();
    xhr.onreadystatechange = function() {
     if(this.readyState == 4) {
      xmlDoc=xhr.responseXML;
     }
   }

【讨论】:

  • 感谢您的解释;有时,在线资源可能难以理解此类主题。
猜你喜欢
  • 2011-12-24
  • 2013-12-24
  • 2011-12-15
  • 2020-01-20
  • 2012-11-02
  • 1970-01-01
  • 2020-05-22
  • 2012-09-11
  • 1970-01-01
相关资源
最近更新 更多