首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

IE和FF中读取XML的有关问题

2012-02-09 
IE和FF中读取XML的问题 - Web 开发 / Ajax源代码如下:!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Stri

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就比较好点. 
建议楼住去查查编码的一些基础知识.

热点排行