2011-02-09 26 views
1

我正在尝试编写一个Internet Explorer 8解决方案,通过'文件'协议加载XML,因为我正在构建的网站旨在作为包直接发送给用户。我尝试使用XMLHttpRequest处理这件事的经历似乎支持我在线阅读的内容:IE8的XMLHttpRequest实现不喜欢该协议,因此我必须使用ActiveXObject来处理加载。JavaScript:ActiveXObject MSXML2.XMLHTTP在成功加载时不返回XML ...?

我已经尝试过不同的人的建议,最终得到的代码似乎是成功获取文件的,因为responseText字段中填充了文件的内容。但是,应该保存XML的responseXML.xml字段(或者它的文本表示,我读过的任何文档都不是很清楚)始终是一个空字符串。我如何配置ActiveXObject来正确加载XML?

作为一个奖励,有人可以解释一下,我应该如何使用加载的XML一旦它成功加载?我还没有找到解释这一点的任何文件。

这里是我的JavaScript:

function isIE() { 
    return navigator.userAgent.lastIndexOf('Trident') > 0; 
} 

// This block ensures that the XML request occurs in the same domain. 
var path = document.location.href; 
path = path.substr(0, path.lastIndexOf('/') + 1); 

if (isIE() && location.protocol == 'file:') { 
    var xmlRequest = new ActiveXObject('MSXML2.XMLHTTP'); 
    xmlRequest.open('GET', path + 'xml/shared.xml', false); 
    xmlRequest.onreadystatechange = useXML; 
    xmlRequest.send(); 

    function useXML() { 
     if (xmlRequest && xmlRequest.readyState && xmlRequest.readyState == 4) { 
      alert(xmlRequest.responseText); // displays the file 
      alert(xmlRequest.responseXML.xml); // displays nothing 
     } 
    } 
} 

这里是我的XML文件:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<shared> 
    <page_title> 
     Test Page Title 
    </page_title> 
</shared> 

我用了W3Schools的XML验证检查这个文件是否在某种程度上畸形。不是这样。

+0

不记得......但你确定,responseXML有一个“xml”属性? – kirilloid 2011-02-09 23:46:58

+0

很确定IE不会为你提供XML,因为它认为它是不安全的。我之前编写了自己的XML解析器来处理文本。 (不要再问了,不要问!) - 有xmlToObject JS库在四处漂泊。 – mwilcox 2011-02-09 23:48:46

回答

2

这是因为本地文件没有为text/xml的(作为服务器会做)等IE浏览器将无法解析它..

您可以用Microsoft.XMLDOM对象手动解析它

function useXML() { 
     if (xmlRequest && xmlRequest.readyState && xmlRequest.readyState == 4) { 
      alert(xmlRequest.responseText); // displays the file 
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
      xmlDoc.async="false"; 
      xmlDoc.loadXML(xmlRequest.responseText); 
      title = xmlDoc.documentElement.getElementsByTagName('page_title')[0]; 
      alert(title.childNodes[0].nodeValue); 
     } 
    } 
相关问题