javascript - 有效的 XML 数据,但在 XMLHttpRequest 响应的 responseXML 属性中为 null
问题描述
URL返回 XML 数据,但 XMLHttpRequest 响应中的 responseXML 属性为空。如何在响应中获取 XML 数据?
document.body.onload = loadXMLDoc();
function loadXMLDoc() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xmlhttp.open("GET", "https://start.vag.de/dm/api/v1/haltestellen/VAG/location?lon=11.06464944&lat=49.4484825&radius=450", true);
xmlhttp.send();
}
function myFunction(xml) {
var i;
var xmlDoc = xml.responseXML;
var table = "";
var x = xmlDoc.getElementsByTagName("Haltestellen");
for (i = 0; i < x.length; i++) {
table += "<tr><td>" + x[i].getElementsByTagName("Haltestellenname")[0].childNodes[0].nodeValue + "</td><td>" + x[i].getElementsByTagName("VGNKennung")[0].childNodes[0].nodeValue + "</td></tr>";
}
document.querySelector("#fahrten-tabelle > tbody").innerHTML = table;
}
#fahrten-tabelle {
padding-bottom: 15px;
padding-top: 5px;
background-color: white;
position: sticky;
top: 49px;
width:100%;
}
#fahrten-tabelle th {text-align:left;}
<table id="fahrten-tabelle">
<thead>
<tr>
<th>Fahrzgnr.</th>
<th>Linie</th>
<th>Start</th>
<th>Startzeit</th>
<th>Ziel</th>
<th>Endzeit</th>
<th>Verlauf</th>
</tr>
</thead>
<tbody></tbody>
</table>
解决方案
默认情况下,该 API 从 ajax 请求返回 json。我知道它看起来总是返回 XML,但您可以在调用之前检查返回文本myFunction()
并查看。尝试将格式设置为 xml:
xmlhttp.open("GET", "https://start.vag.de/dm/api/v1/haltestellen/VAG/location?lon=11.06464944&lat=49.4484825&radius=450&format=xml", true);
当我测试对我有用的代码时。
此外,您可能希望最终验证您对返回的 xml 的一些假设。只是使用
x[i].getElementsByTagName("Haltestellenname")[0].childNodes[0].nodeValue
在我看来相当脆弱。
function loadXMLDoc() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://start.vag.de/dm/api/v1/haltestellen/VAG/location?lon=11.06464944&lat=49.4484825&radius=450&format=xml", true);
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) { myFunction(this); }
};
xmlhttp.send();
}
function myFunction(xml) {
var i;
var xmlDoc = xml.responseXML;
var table="<tr style='padding-bottom:5px;padding-top:5px;background-color:white;position:sticky;top:49px'><th style='text-align:left'>Fahrzgnr.</th><th style='text-align:left'>Linie</th><th style='text-align:left'>Start</th><th style='text-align:left'>Startzeit</th><th style='text-align:left'>Ziel</th><th style='text-align:left'>Endzeit</th><th style='text-align:left'>Verlauf</th></tr>";
var x = xmlDoc.getElementsByTagName("Haltestellen");
for (i = 0; i <x.length; i++) {
var Haltestellenname = x[i].getElementsByTagName("Haltestellenname")[0].childNodes[0].nodeValue;
var VGNKennung = x[i].getElementsByTagName("VGNKennung")[0].childNodes[0].nodeValue
table += "<tr><td>" + Haltestellenname + "</td><td>" + VGNKennung + "</td></tr>";
}
document.getElementById("fahrten-tabelle").innerHTML = table;
}
loadXMLDoc();
<table style="width:100%" id="fahrten-tabelle"></table>
推荐阅读
- python - 如何删除文件python中的一定数量的字节
- go - 无法使用我自己的登录 golang 的功能打印日志信息
- python - 如何使图像/图像在pygame中消失?
- python - .kv 文件不会在 python 中加载
- sql - Postgres 递归 LTREE 查找
- python - Django URL 被调用两次并崩溃视图
- javascript - SAPUI5 - oModel.create 不是函数
- django - 如何将 djangoCMS 与现有的 django 项目集成
- php - 使用 preg_match_all 捕获几个连续的表达式
- c# - 1996 年之前的夏令时 - 意外结果