ie中jQuery無法解析xml文件的解決方案
功能描述:使用jQuery解析已經定義好內容的xml文件
1.xml文件:menu.xml
<?xml version="1.0" encoding="gb2312"?>
<menus>
<menu>
<id>1</id>
<name>system</name>
<parentId>0</parentId>
<target>mainFrame</target>
<url></url>
</menu>
<menu>
<id>2</id>
<name>company</name>
<parentId>1</parentId>
<target>mainFrame</target>
<url></url>
</menu>
</menus>
2.自定義js文件解析xml文件:index.js
$(document).ready(function(){
$.ajax({
url:"xml/menu.xml ",
type:"POST",
dataType:"xml",
success:function(data){
$(data).find("menu").each(function(){
alert("success");
alert($(this).text());
});
},
error:function(data){
alert("fail:");
}
});
});
3.新建index.html文件引入jQuery.js、xml文件及index.js文件,在ie中(任何版本)運行index.html,結果總是彈出“fail”,但是在Firefox中的結果卻是“success”。
在網上搜了很多資料,最后在這篇文章http://www.newmediafun.com/2009/07/parsing-xml-with-jquery-in-internet-explorer/上找到了解決方案。是因為ie中的限制無法正確解析xml文件,它解析出的是一個text對象(在我引用的文章中有更詳細的解釋)所以針對這個加入判斷就可以解決了
正確代碼index.js
$(document).ready(function(){
$.ajax({
url:"xml/menu.xml",
type:"POST",
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;
}
$(xml).find("menu").each(function(){
alert("success");
alert($(this).text());
});
},
error:function(data){
alert("fail:");
}
});
});
//**********************判斷瀏覽器 —— 簡單判斷方法*****************************
<script language="javascript">
if(window.XMLHttpRequest)//判斷瀏覽器是否屬于Mozilla,Sofari
{
alert("firefox");
}
else if(window.ActiveXObject)//判斷瀏覽器是否屬于IE
{
var browser=navigator.appName
var b_version=navigator.appVersion
var version=b_version.split(";");
var trim_Version=version[1].replace(/[ ]/g,"");
if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE7.0")
{
alert("IE 7.0");
}
else if(browser=="Microsoft Internet Explorer" && trim_Version=="MSIE6.0")
{
alert("IE 6.0");
}
}
</script>