需要getElementsByTagName对象吗?真的卡住了!

时间:2010-06-22 17:16:07

标签: javascript xml dom internet-explorer-7 getelementsbytagname

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

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

顺便说一句,它与responseText(和一个txt文件)一起工作正常。但是我已经使用ActiveX Object来实现在IE中工作...奇怪的b / c我认为它支持XMLHttprequest对象。也许这与它有关?

[编辑]

好的我用这个

替换了这一行
    x=xhttp.responseXML.childNodes.length;
    alert(x);
在FF中有2个节点,在IE中有0个。所以显然它无法读取0个childNodes。我想是与空白有关吗?是什么给了什么?

[更新]

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

Program with DOM in JScript

并将在几天后回答我的问题......

2 个答案:

答案 0 :(得分:1)

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

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

实际上,我甚至不明白为什么所需的物体正在发生。有一段时间我转而只使用msxml.DOMDocument.3.0对象,我在本地工作。然后我继续阅读有关IE7中如何支持XMLHttpRequest的内容,因此我回过头来研究该对象。阅读MSDN上的教程后,我注意到他们建议创建一个“虚拟目录”并使用

上的文件
http://localhost.

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

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

由于FF没有访问远程文件,并且IE能够访问它,我真的没有那个......哦,现在我的问题已经解决了,我将报告未来的挫折。谢谢你的阅读!

答案 1 :(得分:0)

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

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

alert(node.childNodes.length);

使用以下XML

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

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