'的document.getElementById(...)'在IE8中为null或不是对象

时间:2014-03-21 05:44:51

标签: javascript html xml

我在尝试获取id并从xml中放置值时收到错误...问题仅在于html ...而不是在xml部分,因为在使用alert时我们得到了xml值...认为DOM元素没有完全加载..也帮我在哪里调用函数,以便成功加载所有DOM元素..

提前致谢..

<html>
        <head>
            <script type="text/javascript">

             var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            var a;
            function loadXML(xmlFile) 

            { 

              xmlDoc.async="false"; 

              xmlDoc.onreadystatechange=verify; 

              xmlDoc.load(xmlFile); 

              xmlObj=xmlDoc.documentElement; 
              a=xmlObj;
              document.getElementById("to").innerHTML=a.childNodes(0).text;
              document.getElementById("from").innerHTML=a.childNodes(1).text;
              document.getElementById("message").innerHTML=a.childNodes(2).text;
              document.getElementById("body").innerHTML=a.childNodes(3).text;    

            }   
            loadXML('note.xml');
            function verify() 

            { 

              if (xmlDoc.readyState != 4) 

              { 

                return false; 

              }  

            }

        </script>

        </head>
        <body>
            <h1>W3Schools Internal Note</h1>
            <div id="div1">
                <b>To:</b> <span id="to" name="to" >aba</span><br />
                <b>From:</b> <span id="from" name="from">abar</span><br />
                <b>Message:</b> <span id="message" name="message">avfdas</span><br />
                <b>Body:</b> <span id="body" name="body">hgj</span>
            </div>


        </body>
    </html>
    <?xml version="1.0" encoding="UTF-8"?>
    <note>
        <to> Tove</to>
        <from>Jani</from>
        <heading>Reminder</heading>
        <body1>Don't forget me this weekend!</body1>
    </note>

1 个答案:

答案 0 :(得分:0)

您正在考虑正确的思路,但您需要了解只有在xml文档完全加载后才能尝试访问xmldocument的节点。

当加载xmldoc时(因为它是异步发生的),无论你设置为onreadystatechange的函数是什么,都会被调用。当readyState为4时,表示文档已加载,之后您应该尝试访问文档的元素。

此外,您的代码仅适用于IE,因为它是唯一支持ActiveXObjects的浏览器。对于跨浏览器解决方案,请执行以下操作:(取自http://msdn.microsoft.com/en-us/library/ie/ms535874(v=vs.85).aspx

function getXMLHttpRequest() 
{
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    }
    else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch(ex) {
            return null;
        }
    }
}

function handler()
{
    if (oReq.readyState == 4 /* complete */) {
        if (oReq.status == 200) {
            console.log(oReq.responseText); // You should try accessing the DOM here.
        }
    }
}
var oReq = getXMLHttpRequest();
if (oReq != null) {
    oReq.open("GET", "http://localhost/test.xml", true);
    oReq.onreadystatechange = handler;
    oReq.send();
}
else {
    window.console.log("AJAX (XMLHTTP) not supported.");
}