0

尝试进行基本的 XML 检索。该代码在 Firefox 和 Opera 中按预期工作,这意味着它使用 XML 文档中“标题”节点的文本值发出警报。但在 IE7 中,我从这一行得到“需要对象”。

  x=xhttp.responseXML.getElementsByTagName("title")[0].childNodes[0].nodeValue;
  alert(x);

顺便说一句,它与 responseText (和一个 txt 文件)一起工作得很好。但我必须使用 ActiveX 对象才能在 IE 中工作……奇怪的 b/c 我认为它支持 XMLHttprequest 对象。也许这与它有关?

[编辑]

好的,我用这个替换了这条线

    x=xhttp.responseXML.childNodes.length;
    alert(x);

在 FF 中有 2 个节点,在 IE 中有 0 个。所以显然它无法读取 0 个子节点。我猜与空格有关吗?是什么赋予了?

[更新]

这一切都与我对如何使用 msxml.DOMDocument 和 Msxml.XMLHTTP ActiveXObjects 的无知有关。我正在以下链接中了解这些对象:

在 JScript 中使用 DOM 进行编程

并会在几天内回答我的问题...

4

2 回答 2

1

我想到了。到目前为止,我没有提到我正在从硬盘驱动器上的文件夹中开发它。这就是问题所在。我想引用我在 webdeveloper.com 在这个线程上发现的“Ultimator”的答案:http ://www.webdeveloper.com/forum/showthread.php?t=147342

IE7自带的XMLHttpRequest即使是同目录下的文件也无能为力,但在同样的情况下,ActiveX可以正常服务IE7。原因是因为 IE7 的 XMLHttpRequest 对象仅限于 web。因此,您的“IE7 中的访问被拒绝”错误,因为您的代码中的 IE7 是通过 XMLHttpRequest 而不是 ActiveX 提供的。另一方面,Firefox 的 XMLHttpRequest 对象允许本地请求和网络请求。

实际上,我什至不明白为什么会发生所需的对象。有一段时间我切换到只使用 msxml.DOMDocument.3.0 对象,并且我在本地工作。然后我继续阅读 IE7 是如何支持 XMLHttpRequest 的,所以我又回到了那个对象的工作上。在阅读了 MSDN 上的教程后,我注意到他们建议创建一个“虚拟目录”并使用

http://localhost.

然后我有了这个想法,为什么我不能将请求指向互联网上的某个地方?我做到了:到 w3schools 上的一个示例 XML 文件。你猜怎么了?它在 IE7 中工作,我能够使用 selectSingleNode 提取我想要的文本。但在 Firebug 中,它说 xmlDoc.responseXML 为空。有趣的...

所以最终我决定在我的机器上激活 IIS(我有 Vista Home Premium)并使用 localhost。有效!FF、IE、Chrome 和 Opera 以相同的方式访问这些文件。所以我学到的教训是:你可以使用 localhost 来模拟服务器的行为,这在本地开发时很有用。

由于 FF 没有访问远程文件,而 IE 能够访问它,我真的不明白......哦,现在我的问题已经解决了,我会报告未来的挫败感。谢谢阅读!

于 2010-06-25T13:37:55.147 回答
0

没有理由不应该这样做,例如:

var xml = response.responseXML, 
    node = xml.getElementsByTagName('child')[0];

alert(node.childNodes.length);

使用以下 XML

<root>
    <child>
        <foo />
    </child>
</root>

当我在 IE7 中运行它时,它正确显示 1. 您是否将响应的内容类型正确设置为 text/xml?

于 2010-06-24T15:29:48.237 回答