getElementsByTagName返回null值(但在调试模式下工作得非常好)

时间:2012-09-28 06:33:00

标签: javascript

此代码接收xml文件并解析它并作为表输出。这是一段代码(面向Firefox):

function viewXML(inputForm) {
        var URL=inputForm.URL.value;    //input XML URL

        // create document and load URL     
        var xmlDoc = document.implementation.createDocument("","doc",null);
        xmlDoc.load(URL);

        xmlDoc.onload = generateHTML(xmlDoc);
        hWin = window.open("","sth", "height=800,width=600");
        hWin.document.write(html_text);
        hWin.document.close();
    }

viewXML是按钮的onClick功能。现在是generateHTML()中的一段代码:

function generateHTML(xmlDoc) {
    ...
    caption=xmlDoc.getElementsByTagName("title").item(0).firstChild.nodeValue;  //<1>
    html_text += "<caption align='left'><h1>" + caption + "</h1></caption>";
    ...
}

一段XML文件:

<catalog>
    <title>Airbus_Aircraft_Families</title>
    <aircraft>
        <Airbus>A380</Airbus>
        <Aircraft>A380</Aircraft>
        <seats>555</seats>
        <Range>15000km</Range>
        <Wingspan>78.8m</Wingspan>
        <Height>24.1m</Height>
    </aircraft>
</catalog>

问题: 当我在Firebug中一步一步地在调试模式下运行它时,此代码工作正常。但是如果没有设置断点,当程序点击行&lt; 1&gt;时,将显示错误说: xmlDoc.getElementsByTagName(“title”)。item(0)为null ,显然不是真的。

有趣的是,当我尝试添加一行

alert(xmlDoc.getElementsByTagName("title").length)
&lt; 1&gt;之前的

行,它会弹出一个窗口显示0,但点击“确定”后,CORRECT标题(来自XML)将显示在新窗口中!正如逐步模式一样。

我尝试的事情:

1,将xmlDoc.getElementsByTagName("title").item(0)更改为xmlDoc.getElementsByTagName("title")[0]

没用,调试器告诉我“xmlDoc.getElementsByTagName(”title“)[0]未定义”

2,删除了XML文件中标签内或标签之间的所有空格,但没有帮助。

1 个答案:

答案 0 :(得分:0)

问题可能是由于您的文档是异步加载的。您可以在此处查看document.async财产。我想如果你将这个属性设置为false,你的代码就可以工作。

// create document and load URL
var xmlDoc = document.implementation.createDocument("","doc",null);
xmlDoc.async = false;
xmlDoc.onload = generateHTML(xmlDoc);
xmlDoc.load(URL);

请注意,在调用load函数之前,我将附加事件处理程序的行移动到load事件。