2012-11-20 39 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