Xml:无法调用null的方法'getElementsByTagName'

时间:2014-08-20 13:22:42

标签: javascript xml

我想用javascript从XML文件中获取信息,但我有一个错误,我无法解决自己... "无法调用方法' getElementsByTagName' of null"

我认为这是我的XML中的一个问题,但我不知道在哪里

这是我的javascript

 var map;
    var mod;

    var xmlDoc;
    var xhr = new XMLHttpRequest();

    xhr.overrideMimeType("text/xml");

    xhr.open('GET' , 'streamcontrol.xml');
    xhr.send();
    xhr.onreadystatechange = function(){
        xmlDoc = xhr.responseXML;

        map = xmlDoc.getElementsByTagName('mapname');
        map = xmlDoc.getElementsByTagName('modname');

    }

我的Xml

<!DOCTYPE StreamControl>
<items>
 <timestamp>1408381485</timestamp>
 <mapname>hijacked</mapname>
 <modname>retd</modname>
</items>

2 个答案:

答案 0 :(得分:2)

在onreadystatechange函数中,您可能应该检查就绪状态:

var map;
var mod;

var xmlDoc;
var xhr = new XMLHttpRequest();

xhr.overrideMimeType("text/xml");

xhr.open('GET' , 'streamcontrol.xml');
xhr.send();
xhr.onreadystatechange = function(){

    if (xhr.readyState==4 && xhr.status==200)
    {
        xmlDoc = xhr.responseXML;
        map = xmlDoc.getElementsByTagName('mapname');
        map = xmlDoc.getElementsByTagName('modname');
    }

}

readyState保存XMLHttpRequest的状态:

  

0:请求未初始化
   1:建立服务器连接
   2:收到请求
   3:处理请求
   4:请求已完成且响应已准备好

当一切正常时,

状态为200,找不到404 ......

答案 1 :(得分:0)

感谢您对节点文档的评论,如果可以帮助任何人,我发布我的脚本:

function loadXMLDoc(filename)
{
if (window.XMLHttpRequest)
  {
  xhttp=new XMLHttpRequest();
  }
else // code for IE5 and IE6
  {
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xhttp.open("GET",filename,false);
xhttp.send();
return xhttp.responseXML;
}

xmlDoc=loadXMLDoc('streamcontrol.xml');
map_node=xmlDoc.getElementsByTagName('mapname')[0].childNodes[0];
map = map_node.nodeValue;