【问题标题】:Loading an XML file using xmlhttp in IE8在 IE8 中使用 xmlhttp 加载 XML 文件
【发布时间】:2012-04-21 10:46:39
【问题描述】:

我正在设计一个在线调查,其中一个主要功能是问题存储在外部 XML 文件中,每次都会加载随机问题。虽然我的代码在 Firefox 中运行良好,但当我尝试在 Internet Explorer 8 中加载页面时出现“访问被拒绝”错误。我已将问题隔离到以下代码部分:

//Import the XML File
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5*/
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

//Import XML
xmlhttp.open("POST","Personalized Tour/questions.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

特别是,错误似乎是在 xmlhttp.open 上抛出的。我在其他几个网站上查看了类似的问题,他们似乎暗示有某种域错误触发了 IE8 的安全设置。是这样吗,还是有更多的原因?

感谢您的帮助。

【问题讨论】:

  • 您使用的是“file://”网址吗?如果是这样,那可能就是问题所在 - IE 不认为“file://”页面共享一个域,因此它可以保护它们免受彼此的影响。 Chrome 做同样的事情。
  • "Personalized Tour/questions.xml" 不是有效的 URL。不允许有空格。
  • 谢谢。问题实际上是“file://”URL,现在看来这个问题已经解决了。
  • 不幸的是,我现在似乎遇到了不同的问题。它似乎可以在 XML 中加载,但是当我尝试访问 xmlDoc 变量中的数据时,我的代码会引发错误。你知道IE是否使用不同的xmldom语法吗?我现在的代码:var majorCats = xmlDoc.getElementsByTagName("major")[0]; var printValue = majorCats.childNodes[1].childNodes[9].childNodes[0].nodeValue;

标签: javascript internet-explorer-8 xmlhttprequest xmldom


【解决方案1】:

在 IE 上你可以直接在 xml doc 上使用 XPATH,其他浏览器通过创建一个 xpath 解析器来做到这一点

所以,选择所有“主要”元素就像:

xmlDoc.selectNodes("//major")

但是一旦你有了那个 [0] 索引选择器,你就可以更有效地做到这一点:

xmlDoc.selectSingleNode("//major")

两者的结果截然不同(除了性能增益)

selectNodes 将返回一个节点列表(该列表不是 dom 部分) selectSingleNode 将返回第一个节点(不是列表)

但是,您可以使用 xpath 在一个命令中进行最终选择,例如:

xmlDoc.selectSingleNode("//major/*[1]/*[9]/*[0]")

/*[n] 表示法是可以的,但如果它们是唯一的或两者的组合,您可以使用节点名称

拥有可以根据需要添加 .noValue、.text、.textContent、.nodeName 的节点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多