尝试进行基本的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的无知有关。我在以下链接中了解这些对象:
并将在几天后回答我的问题......
答案 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?