技术文

js:异步的锅-->不能取到xml节点数

2015-08-27  本文已影响50人  歇歇

问题描述

昨天用js解析xml时遇到一个奇怪的问题,使用console输出xml某个节点的节点数时,始终输出0,但是在console前面增加一个alert()函数后,console可以正常输出节点数,而alert弹出的节点数却也是0。

下面是代码:

window.onload=function(){
    var xml=loadXML("./test.xml");
    alert(xml.getElementsByTagName("row").length);
    console.log(xml.getElementsByTagName("row").length);
    openNew(xml);
}


loadXML = function (xmlFile) {
    var xmlDoc;
    if(window.ActiveXObject) {
        xmlDoc =new ActiveXObject("microsoft.xmldom");         
    }else if (document.implementation && document.implementation.createDocument) {
        xmlDoc = document.implementation.createDocument('','', null);  
    }
    try{
        xmlDoc.load(xmlFile);
    }catch(e){
    alert(e);
    }
    return xmlDoc;
}
alert弹出值 console输出值

问题解决

加入关闭异步的位置:

loadXML = function (xmlFile) {
    var xmlDoc;
    if(window.ActiveXObject) {
        xmlDoc =new ActiveXObject("microsoft.xmldom");         
    }else if (document.implementation && document.implementation.createDocument) {
        xmlDoc = document.implementation.createDocument('','', null);  
    }
    try{
        xmlDoc.async =false;//关闭异步执行,让页面等待xmlDoc加载完毕,再继续执行
        xmlDoc.load(xmlFile);
    }catch(e){
    alert(e);
    }
    return xmlDoc;
}

我又在后面的用了一个1毫秒延时的定时器,发现加载还是很快的,1毫秒之内就xml加载完成了。

console.log(xml.getElementsByTagName("row").length);
    setInterval(function(){
        console.log(xml.getElementsByTagName("row").length);
    },1);
Paste_Image.png
上一篇 下一篇

猜你喜欢

热点阅读