2011-02-09 49 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); 
     } 
    } 
相關問題