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

问题描述

昨天用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输出值

问题解决

  • 原来是因为js异步执行导致xml还没有加载完成,程序就执行完console,所以在没有加alert时,console的输出是0。在loadXML()中加入关闭异步的代码就行了。
  • 之所以加入alert之后,console输出正常,是因为alert可以阻断js的执行,阻断的期间,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.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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined、Nul...
    极乐君阅读 10,988评论 0 106
  • 第一章: JS简介 从当初简单的语言,变成了现在能够处理复杂计算和交互,拥有闭包、匿名函数, 甚至元编程等...
    LaBaby_阅读 5,617评论 0 6
  • 嗯,没做什么调查,纯脑补,偏黑暗风。我只是在用这个事件做背景写个乡村苦情剧的脚本而已,怎么理解那凭诸位看客的心情了...
    久户花恋不恋花阅读 2,962评论 0 1
  • 忆江南 (纳兰性德) 江南好,真个到梁溪。一幅云林高士画,数行泉石故人题。还似梦游非? 公元1684年(清康熙二十...
    独钓云烟阅读 3,599评论 0 22
  • 前几个月,《盗墓笔记》点击量破20亿大关,被业界称为“开启网络剧新纪元”。打着“三无”标签的《无心法师》占据话题榜...
    114号别墅阅读 2,701评论 0 1