未捕获的TypeError:无法读取未定义的属性'responseXML'

时间:2018-03-28 09:52:43

标签: javascript xml

我正在尝试使用JavaScript开发网站

目标是获取xml文件的数据,并将其转换为变量。

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        initMap(this);
    }
};

xhttp.open("GET", "https://applications002.brest-metropole.fr/WIPOD01/Transport/REST/getGeolocatedVehiclesPosition?format=xml&route_id=1&trip_headsign=Fort%20Montbarey", true);

xhttp.send();

function initMap(xml) {
    var xlat, xlon, i, xmlDoc;
    xmlDoc = xml.responseXML;
    xlat = xmlDoc.getElementsByTagName('Lat');
    xlon = xmlDoc.getElementsByTagName('Lon');
    /*
    xlat = xml.responseXML.getElementsByTagName('lat');
    xlon = xml.responseXML.getElementsByTagName('lon');
    */
    for (i = 0; i < xlat.length; i++) {
        var latcode = xlat[i].childNodes[0].nodeValue;
        var loncode = xlon[i].childNodes[0].nodeValue;
        //var myLatLng = "{lat: " + latcode + ", lng: " + loncode +"}";
        //var myLatLng = {lat: latcode, lng: loncode};
        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(latcode, loncode),
            map: map,
        });
    }
    [...]
}

但我收到此代码错误:Uncaught TypeError: Cannot read property 'responseXML' of undefined @ - &gt; xmlDoc = xml.responseXML;

我已经尝试按xmlDoc = xml.responseXML;

重新xmlDoc = this.responseXML;

但是我获得了getElementByTagName的一些错误:Uncaught TypeError: Cannot read property 'getElementsByTagName' of undefined

感谢您的帮助! 雅克

编辑:代码来源:Google Doc是的,现场演示适用于我,我正在使用谷歌浏览器

2 个答案:

答案 0 :(得分:0)

对于Uncaught TypeError: Cannot read property 'getElementsByTagName' of undefined错误,很有可能XML文件中的一项没有定义您要查找的标签值。扫描xml,并确保每个条目中都有该标签的值。

我不知道如何处理不完整的文档。

关于Uncaught TypeError: Cannot read property 'responseXML',我发现很多页面上的页面看起来都很好。到我现在忽略它的地步;但我希望有人来解释它,以便我可以解决任何潜在的问题。

答案 1 :(得分:0)

因为您没有在xlat[i]xlon[i]处给出子节点名称。

将其更改为

/*var latcode = xlat[i].childNodes[0].nodeValue; var loncode = xlon[i].childNodes[0].nodeValue;*/

/*
var latcode = xlat[i].getElementsByTagName("give child node tag name")[0].childNodes[0].nodeValue;

 var loncode = xlon[i].getElementsByTagName("give child node tag name")[0].childNodes[0].nodeValue;
*/