2012-11-20 40 views
1

我使用ajax_upload上傳文件,而整個頁面的回發。 服務器將響應作爲XML返回,然後在我的onComplete函數中解析,這適用於Chrome,Safari和Firefox,但不適用於Internet Explorer。這在Internet Explorer中不起作用的原因(至少我認爲是這個原因)是,IE解析iframe中的XML,並使用語法突出顯示它,並且所有iframe設置爲0即可。 當ajax_uploads then讀取iframe會得到一個損壞的XML版本,我無法用$ .parseXml()解析,因爲IE添加了語法高亮語法。獲取與iframe XML在Internet Explorer

我有谷歌搜索,並發現提到使用iframe.document.XMLDocument從iframe中獲取原始XML,但它不適用於我和帖子提到它是真的老了。

所以問題是,有沒有人知道如何從iframe中獲取XML數據,而不用通過IE完成的語法高亮顯示(它通過添加HTML並在我的XML中轉義標記)或者有辦法告訴IE不要解析HTTP標頭中的XML或類似的東西?

回答

0

我想Content-Type: text/plain可以在解決此問題的幫助,但這只是在其他瀏覽器幫助。 IE有自己的方式來檢測內容類型,並且這種行爲不容易被禁用。有關這方面的更多信息,請登錄MSDN,更簡單地提供here

當然你可以做一個骯髒的黑客就像這樣:

<iframe src="test.xml" onload="test()" id="f1"></iframe> 

和解析突出顯示的代碼:

function test() { 
    var iframe = document.getElementById('f1'); 
    var frameBody = iframe.contentWindow.document.body; 

    // remove unneeded toggle links +/- 
    var links = frameBody.getElementsByTagName('a'); 
    for (var i = links.length - 1; i >= 0; i--) { 
     if(links[i].className === 'b') { 
      links[i].parentNode.removeChild(links[i]); 
     } 
    } 

    // display parsed XML source 
    alert(frameBody.innerText); 

    // parse cleaned highlight code source to new XML document 
    var xml = $.parseXML(area.value); 
    alert(xml); 
} 

這個工作在IE6-8,但這種方式是不可靠的:)所以我如果可能的話,建議您使用JSON而不是XML來避免此問題。

+0

這太糟糕了,我不得不使用JSON使它在這部分工作,因爲在其他地方我可以使用$ .ajax()代替iframe但總是有一個瀏覽器不喜歡解決方案的一部分,所以我想我必須將其改爲今天發送JSON並查看結果如何。 – esrange

+0

在ie 9中做這個工作嗎? – Codler

+0

IE9的行爲與其他現代瀏覽器一樣。你只需要爲'xml'響應設置'text/plain',並且這個工作不會很難分析。 – Inferpse