日期:2014-05-17  浏览次数:20501 次

javascript读取长XML字符串,页面会卡死!读完了才释放,怎么异步操作呢。
function getxml(xml) 

  this.isIE=true; if (window.ActiveXObject){isIE=true;}else{isIE=false;} 
  var node_xml;if (isIE) {xmlDc = new ActiveXObject("Msxml2.DOMDocument");} 
  else {if (document.implementation && document.implementation.createDocument) xmlDc = document.implementation.createDocument("","",null); } 
  xmlDc.async = true; if(isIE){xmlDc.loadXML(xml);} else {var oParser = new DOMParser();xmlDc = oParser.parseFromString(xml,"text/xml");} 
  return xmlDc; 

var data='
<x>
<r a="1" b="2" c="3" />
<r a="2" b="2" c="3" />
<r a="3" b="2" c="3" />
<r a="4" b="2" c="3" />
<r a="5" b="2" c="3" />
<r a="6" b="2" c="3" />
<r a="7" b="2" c="3" />
  .............
</x>';
//下面readdata函数读取长XML字符串,页面会卡死!读完了页面才释放,有没有异步操作方法呢。
function readdata(data) 
{
  xmlDoc=getxml(data);
  if(xmlDoc.childNodes.length!=0)
  {
  for(i=0;i<xmlDoc.childNodes[0].childNodes.length;i++)
  {  
  var a=xmlDoc.childNodes[0].childNodes[i].getAttribute("a");
  var b=xmlDoc.childNodes[0].childNodes[i].getAttribute("b");
  var c=xmlDoc.childNodes[0].childNodes[i].getAttribute("c");
  }
  }
}

------解决方案--------------------
使用XMLHTTP、XMLHttpRequest去读取
------解决方案--------------------
不懂,帮顶...

不过LZ可以在后台把XML转换成JSON返回给前边,然后用jQuery来处理JSON数据会不会快点儿
------解决方案--------------------
用javascript 读XML字符串里面的内容了。

那可能没有太好的方法,只能使用 DOM操作。
------解决方案--------------------
当然,也可以采用些优化的方法,如
 var droot = xmlDoc.childNodes[0]
 for(i=0,count = droot.childNodes.length;i<count ;i++)
{
var a=droot.childNodes[i].getAttribute("a");
var b=droot.childNodes[i].getAttribute("b");
var c=droot.childNodes[i].getAttribute("c");
}

看看效果如何

另外还有getElementsByTagName,selectNodes方法等
------解决方案--------------------
干嘛用xml用json多好的选择啊
------解决方案--------------------
干嘛用xml用json多好的选择啊