我在从XML文件中加载值并将其插入HTML表时遇到问题。它说我尝试访问的html标签是未定义的"script.js:15未捕获的类型错误:无法读取未定义的属性'getElementsByTagName'"。我正在尝试从加载的 XML 文件中将 和 的值插入到 html 表中。
// script.js
function loadXMLDoc() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xmlhttp.open("GET", "table.xml", true);
xmlhttp.send();
}
function myFunction() {
var xmlDoc = XMLHttpRequest.responseXML;
var table = '<tr><th>Name</th><th>Age</th></tr>';
var x = xmlDoc.getElementsByTagName('STUDENT');
for (i = 0; i < x.length; i++) {
table += "<tr><td>" +
x[i].getElementsByTagName("NAME")[0].childNodes[0].nodeValue +
"</td><td>" +
x[i].getElementsByTagName("AGE")[0].childNodes[0].nodeValue +
"</td></tr>";
}
document.getElementById("students") = table;
}
//relevant html
<body>
<br><br>
<table id="students"></table>
<script src="script.js"></script>
</body>
//XML Doc Contents
<CLASS ID=”Advanced Web Development”>
<STUDENT>
<NAME>Tom</NAME>
<AGE>19</AGE>
<HEIGHT>1.3</HEIGHT>
<SEX>M</SEX>
<GRADE>B</GRADE>
</STUDENT>
<STUDENT>
<NAME>Dick</NAME>
<AGE>29</AGE>
<HEIGHT>1.1</HEIGHT>
<SEX>M</SEX>
<GRADE>A</GRADE>
</STUDENT>
<STUDENT>
<NAME>Harry</NAME>
<AGE>39</AGE>
<HEIGHT>1.5</HEIGHT>
<SEX>M</SEX>
<GRADE>C</GRADE>
</STUDENT>
<STUDENT>
<NAME>Mary</NAME>
<AGE>30</AGE>
<HEIGHT>1.1</HEIGHT>
<SEX>F</SEX>
<GRADE>B+</GRADE>
</STUDENT>
</CLASS>
您在这里似乎没有做一些事情:
首先,XMLHttpRequest
类没有responseXML
属性:这不是获取异步请求结果的位置。 相反,responseXML
属性属于单个XMLHttpRequest
对象(或"实例")。 在行var xmlhttp = new XMLHttpRequest();
的变量xmlhttp
中创建一个新的XMLHttpRequest
实例,它将xmlhttp
包含responseXML
属性。
此外,您将onreadystatechange
处理程序中的this
值传递给myFunction
,但myFunction
不接受任何参数。 JavaScript 对调用具有正确参数数量的函数的限制非常宽松:任何多余的参数都会被忽略。
尝试将此函数的前几行从
function myFunction() {
var xmlDoc = XMLHttpRequest.responseXML;
自
function myFunction(result) {
var xmlDoc = result.responseXML;
这允许myFunction
接收xmlhttp
实例并从中提取响应 XML。
其次,在函数的末尾,您编写:
document.getElementById("students") = table;
变量table
包含表示表内容的 HTML 字符串。 但是,不能将元素设置为 HTML 字符串。 相反,您要做的是使用此元素的innerHTML
属性将此 HTML 字符串分配给此元素的内部 HTML:
document.getElementById("students").innerHTML = table;
最后,您在问题中包含的XML文档格式不正确,因为根元素的ID
属性使用智能引号(”
)将值括起来,而它应该使用中性引号("
)代替。 如果 XML 格式不正确,则result
的responseXML
属性将null
。
我对代码进行了这些更改,并且它起作用了,因为我可以加载 XML 并使用 XML 文件中的数据填充表。