解决jQuery在IE6下遍历XML的Bug!

本文探讨了在Internet Explorer 6中使用jQuery进行XML数据解析遇到的问题及解决方案。由于IE6的安全性限制,jQuery不能直接解析XML数据。文章提供了一种变通方法,通过检查浏览器类型并在IE6中手动将文本数据转换为XML来解决问题。

参考博文《IE下利用jQuery分析XML》地址:http://www.newmediafun.com/2009/07/parsing-xml-with-jquery-in-internet-explorer/

本来以为jQuery会很好的解决所有浏览器兼容性问题,但是阵亡的IE6还是会找麻烦!

jQuery使用AJAX时,在IE6下读取回传到XML数据会有问题,具体看下面的例子吧。

准备数据文件test.xml

<ArrayOfManagement_Contact> <Management_Contact> <user_id>123457</user_id> <tel_type>2</tel_type> <tel>879</tel> <visibility>0</visibility> <del_flg>0</del_flg> <id>537</id> </Management_Contact> <Management_Contact> <user_id>123457</user_id> <tel_type>2</tel_type> <tel>54645</tel> <visibility>0</visibility> <del_flg>0</del_flg> <id>538</id> </Management_Contact> </ArrayOfManagement_Contact>

正常情况下可以使用 $.get / $.post,但是IE有个安全性限制的问题,会使jQuery无法正确解释XML数据,至于什么安全性,没兴趣深究,就当bug处理!作者原文的解释如下:

What happens is that the XML gets loaded into IE as a text object, then gets converted into usable XML data. Any other browsers get the XML data directly.
Bug原因:IE请求XML文件时,后将它作为文本对象加载,之后需要我们手动转成XML类型的数据才可以使用,而其他浏览器会直接装载XML类型数据。

所以在下面的代码中,solution1是无法正确工作的,solution2提供了变通的转换方案,问题解决!

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>123123123</title> <mce:script type="text/javascript" src="jquery-1.3.2.min.js" mce_src="jquery-1.3.2.min.js"></mce:script> <mce:script type="text/javascript"><!-- function test() { /* // solution 1 $.post('test.xml', null, function (data) { var mydata = data; alert('my'); alert($(mydata).find("user_id").eq(1).text()); }); */ // solution 2 $.ajax({url: 'test.xml', dataType: ($.browser.msie) ? "text" : "xml", success: function(data){ var xml; if (typeof data == "string") { xml = new ActiveXObject("Microsoft.XMLDOM"); xml.async = false; xml.loadXML(data); } else { xml = data; } alert($(xml).find("user_id").eq(1).text()); } } ); } // --></mce:script> </head> <body> <input type="button" onclick="javascript:test();" value="test" /> </body> </html>

PS:我真是让优快云开了,粘贴个代码也会有bug,粘贴的代码里有<textarea>,就有问题,唉……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值