IE和FF中读取XML的问题 - Web 开发 / Ajax
源代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Parsing XML Responses with the W3C DOM</title>
<script type="text/javascript">
var xmlHttp;
var requestType = "";
function createXMLHttpRequest()
{
if(window.ActiveXObject)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHttp");
}
else if(window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest();
}
}
function startRequest(requestedList)
{
requestType=requestedList;
createXMLHttpRequest();
xmlHttp.onreadystatechange=handleStateChange;
xmlHttp.open("GET","parseXML.xml",true);
xmlHttp.send(null);
}
function handleStateChange()
{
if(xmlHttp.readyState==4)
if(xmlHttp.status==0)
{
if(requestType=="north")
listNorthStates();
else if(requestType=="all")
listAllStates();
}
}
function listNorthStates()
{
var xmlDoc=xmlHttp.responseXML;
alert(xmlDoc.getElementsByTagName("states").length); [b]//IE中返回0,FF中返回1[/b] alert(xmlDoc.getElementsByTagName("state").length); //IE中返回0,FF中返回12
var northNode=xmlDoc.getElementsByTagName("north")[0]; //northNode赋值后仍为null
var out="Northern States";
var northStates=northNode.getElementsByTagName("state");
outputList(out,northStates);
}
function listAllStates()
{
var xmlDoc=xmlHttp.responseXML;
var out="All States";
var allStates=xmlDoc.getElementsByTagName("state");
outputList(out,allStates)
}
function outputList(tit,states)
{
var out=tit;
for(var i=0;i<states.length;i++)
{
var stateName=states[i].childNodes[0].nodeValue;
tit+="\n-"+stateName;
}
alert(tit);
}
</script>
</head>
<body>
<h1>Process XML Document of U.S. States</h1>
<br/><br/>
<form action="#">
<input type="button" value="View All Listed States" onclick="startRequest('all')" />
<input type="button" value="View All Listed Northern States" onclick="startRequest('north')" />
</form>
</body>
</html>
parseXML.xml
<?xml version="1.0" encoding="UTF-8"?>
<states>
<north>
<state>Minnesota</state>
<state>Iowa</state>
<state>North Dakota</state>
</north>
<south>
<state>Texas</state>
<state>Oklahoma</state>
<state>Louisiana</state>
</south>
<east>
<state>New York</state>
<state>North Carolina</state>
<state>Massachusetts</state>
</east>
<west>
<state>California</state>
<state>Oregon</state>
<state>Nevada</state>
</west>
</states>
这是Ajax基础教程中的代码,但是在FF下运行成功,在IE中运行不成功,我也找过很多关于这个的帖子,但是没有找到很好的解释,有人说是XML文件编码的问题,但是我把编码换成GBK格式还是无法正常运行,请问有人知道这是为什么吗?
[解决办法]
.html修改如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Parsing XML Responses with the W3C DOM</title>
<script type="text/javascript">
var xmlHttp;
var requestType = "";
function createXMLHttpRequest()
{
if(window.ActiveXObject)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHttp");
}
else if(window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest();
}
}
function startRequest(requestedList)
{
requestType=requestedList;
createXMLHttpRequest();
xmlHttp.onreadystatechange=handleStateChange;
xmlHttp.open("GET","parseXML.xml",true);
xmlHttp.send(null);
}
function handleStateChange()
{
if(xmlHttp.readyState==4)
if(xmlHttp.status==0)
{
if(requestType=="north")
listNorthStates();
else if(requestType=="all")
listAllStates();
}
}
function listNorthStates()
{
var xmlDoc=createXMLDoc(); //在这个函数里生成xmlDoc实例,下面listAllStates()也一样
var northNode=xmlDoc.getElementsByTagName("north")[0];
var out="Northern States";
var northStates=northNode.getElementsByTagName("state");
outputList(out,northStates);
}
function listAllStates()
{
var xmlDoc=createXMLDoc();
var out="All States";
var allStates=xmlDoc.getElementsByTagName("state");
outputList(out,allStates)
}
function outputList(tit,states)
{
var out=tit;
for(var i=0;i<states.length;i++)
{
var stateName=states[i].childNodes[0].nodeValue;
tit+="\n-"+stateName;
}
alert(tit);
}
function createXMLDoc() //通过对浏览器区分来声明xmlDoc
{
var xmlDoc;
var response=xmlHttp.responseText;
if(window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(response);
}
else
{
xmlDoc=xmlHttp.responseXML;
}
return xmlDoc;
}
</script>
</head>
<body>
<h1>Process XML Document of U.S. States</h1>
<br/><br/>
<form action="#">
<input type="button" value="View All Listed States" onclick="startRequest('all')" />
<input type="button" value="View All Listed Northern States" onclick="startRequest('north')" />
</form>
</body>
</html>
[解决办法]
确实是编码问题 如果你的xml文件是在光盘或者网上下载的有可能是其他区域编码编码,即使你强制标为utf-8.
建议你用记事本重新或写字板新建个文件,在保存的时候注意选择编码为Unicode,并把XML中编码标志改为Unicode.
UTF-8编码能显示的字符太少了,现在几乎没用出. Unicode编码比较通用,大陆常用GB2321.
[解决办法]
有时侯一些xml文件标志utf-8编码,但其实不是utf-8编码存储, IE就回认错.
xml文本文件可以用utf-8 utf-9 Unicode 等多种格式存储,IE比较烂,xml文档的存储格式一定要和标志的一致才能读取,FF就比较好点.
建议楼住去查查编码的一些基础知识.