无法读取null的属性'getElementsByTagName'

时间:2014-12-06 12:02:46

标签: javascript xml

我现在已经在两天左右的时间里一直在寻找这个问题的答案。我似乎无法弄清楚它是怎么回事。所有这些似乎过去都有效但不再适用了。

XML:

<ZipCodes>
<results>
    <city>Chicago</city>
    <state>IL</state>
    <timezone>-6</timezone>
</results>

的javascript:

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.open("GET","_checkzip.php?zip="+str,true);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 

x=xmlDoc.getElementsByTagName("results");
i=0;



    document.forms["signup"]["City"].value=(x[i].getElementsByTagName("city")[0].childNodes[0].nodeValue);
    document.forms["signup"]["states"].value=(x[i].getElementsByTagName("state")[0].childNodes[0].nodeValue);
    document.forms["signup"]["TimeZone"].value=(x[i].getElementsByTagName("timezone")[0].childNodes[0].nodeValue);

我得到的错误是

Cannot read property 'getElementsByTagName' of null

当我尝试x = xmlDoc.getElementsByTagName(&#34; results&#34;);当我在Chrome中查看调试时,xml会对网络响应产生影响。

2 个答案:

答案 0 :(得分:2)

您可以在XMLHttpRequest onreadystatechange上使用事件处理程序来确保请求已完成。如果readyState的状态为4,则操作完成。

目前您还在询问尚未传输的数据。

答案 1 :(得分:0)

除了确保xmlhttp.readyState == 4&amp;&amp; xmlhttp.status == 200,如果在从服务器发送xml数据之前输出任何内容,字母,字符或字符串,也会发生此错误。例如,假设在java中你有一个名为sendXMLdata的方法/函数,然后在你的servlet中你打印了字符串&#34; connected&#34;在调用方法之前: ....     通过out.println(&#34;连接&#34);     字符串数据=&#34;我的名字&#34;     sendXMLdata(响应数据); ....

然后从浏览器源查看时的输出将是: 连接的 我的名字

所以这肯定会给你一个错误,因为浏览器无法解析字符串&#34; connected&#34;因为它不是呈现xml数据的写入格式。