美文网首页技术文
js:异步的锅-->不能取到xml节点数

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

作者: 歇歇 | 来源:发表于2015-08-27 09:34 被阅读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输出值

问题解决

  • 原来是因为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

相关文章

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

    问题描述 昨天用js解析xml时遇到一个奇怪的问题,使用console输出xml某个节点的节点数时,始终输出0,但...

  • java_Ajax

    Ajax:(asynchronous js and xml) 异步的js和xml 指的是一种交互方式 异步加载,客...

  • 02.14 Ajax

    什么是Ajax A - asynhronous ja - javascript x - xml(异步js+xml)...

  • 2018-11-27

    AJAX AJAX是什么??? Asynchronous JavaScript & XML(js请求XML异步的技...

  • Ajax中的XMLHttpRequest

    Ajax Asynchronous Javascript And Xml(异步的js和xml) 本质:使用J...

  • AJAX基础及原理

    AJAX基础知识 什么是AJAX?async javascript and xml, 异步的JS和XML XML:...

  • AJAX

    1、ajax简介:ajax=asynchrinous javascript and xml(异步js和xml)aj...

  • Web基础复习——AJAX

    AJAX是什么 AJAX,Asynchronous JavaScrpt and XML,异步的JS和XML。不是新...

  • ajax的特性及乱码等

    ajax的全称是asynchronous javascript and XML ,它是异步的js和XML。它是局部...

  • Day_9-Ajax基础

    1.什么是Ajax 解释:A:asynchronousja:javascriptx:xml (异步js+xml)功...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/rhafcttx.html