我正在尝试将数据从xml文件加载到表元素中,由于某些原因,当我调用xmldoc.getElementsByTagName时抛出一个错误,说它是null。这是我的xml文档
<?xml version="1.0" encoding="UTF-8"?>
<table>
<row><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td><td>2</td><td>9</td><td>1</td><td>0</td></row>
<row><td>1</td><td>1</td><td>0</td><td>1</td><td>9</td><td>1</td><td>0</td><td>0</td><td>0</td></row>
<row><td>9</td><td>1</td><td>0</td><td>1</td><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td></row>
<row><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td><td>2</td><td>9</td><td>1</td><td>0</td></row>
<row><td>1</td><td>1</td><td>0</td><td>1</td><td>9</td><td>1</td><td>0</td><td>0</td><td>0</td></row>
<row><td>9</td><td>1</td><td>0</td><td>1</td><td>1</td><td>1</td><td>0</td><td>0</td><td>0</td></row>
</table>这是我的Javascript函数
function getMineField() {
var request = new XMLHttpRequest();
request.open("GET", "field.xml", false);
request.send(null);
// THE FOLLOWING CHECK CAN BE COMMENTED OUT WHEN USED
// WITH A LOCAL FILE (DEPENDING ON YOUR BROWSER). SAFARI ON A
// MAC RETURNS A STATUS OF ZERO WHEN USING XMLHttpRequest WITH
// A LOCAL FILE.
var main = document.getElementById("main");
var xmldoc = request.responseXML;
// THE FOLLOWING CODE USES THE SAME XML STRUCTURE (AND A FEW OF THE
// SAME VARIABLE NAMES) AS Example 21-7 IN JavaScript: The Definitive Guide
// BY DAVID FLANAGAN, BUT THIS EXAMPLE IS A LOT SIMPLER.
var xmlrows = xmldoc.getElementsByTagName("row");
var row = xmlrows.length;
for (var r = 0; r < row; r++) {
var xmlrow = xmlrows[r];
var tr = document.createElement('tr')
for (var c = 0; c < row; c++)
{
//html += "Name: " + xmlrow.getAttribute("name");
var td = document.createElement("td")
// NOTE THAT getElementsByTagName RETURNS A LIST
var tdata = xmlrow.getElementsByTagName("td")[c];
console.log(tdata)
td.innerHTML=tdata.firstChild.data;
tr.appendChild(td);
}
main.appendChild = xmlrow;
}
}发布于 2016-11-29 09:02:43
XMLHttpRequest()是一个异步调用。在您的代码中,您不是在等待响应,而是尝试直接使用请求。在返回响应之前,请求将为空。
这是你应该如何处理它:
function getMineField() {
var request = new XMLHttpRequest();
//here we define what to do with the response once returned:
request .onreadystatechange = function() {
if (request .readyState == 4) {
//read the xml here:
var xmldoc = request.responseXML;
// THE FOLLOWING CODE USES THE SAME XML STRUCTURE (AND A FEW OF THE
// SAME VARIABLE NAMES) AS Example 21-7 IN JavaScript: The Definitive Guide
// BY DAVID FLANAGAN, BUT THIS EXAMPLE IS A LOT SIMPLER.
var xmlrows = xmldoc.getElementsByTagName("row");
var row = xmlrows.length;
for (var r = 0; r < row; r++) {
var xmlrow = xmlrows[r];
var tr = document.createElement('tr')
for (var c = 0; c < row; c++)
{
//html += "Name: " + xmlrow.getAttribute("name");
var td = document.createElement("td")
// NOTE THAT getElementsByTagName RETURNS A LIST
var tdata = xmlrow.getElementsByTagName("td")[c];
console.log(tdata)
td.innerHTML=tdata.firstChild.data;
tr.appendChild(td);
}
main.appendChild = xmlrow;
}
}
}
// THE FOLLOWING CHECK CAN BE COMMENTED OUT WHEN USED
// WITH A LOCAL FILE (DEPENDING ON YOUR BROWSER). SAFARI ON A
// MAC RETURNS A STATUS OF ZERO WHEN USING XMLHttpRequest WITH
// A LOCAL FILE.
var main = document.getElementById("main");
//perform the request, once there is a result it will invoke the method above onreadystatechange
request.open("GET", "field.xml", false);
request.send(null);
}这是未经测试的,但它应该会给您一个想法。有关详细信息,请参阅answers here或documentation here
发布于 2016-11-30 01:55:08
问题是,当我将xml行附加到我的主变量时,我应该做的是附加我创建的名为"tr“的元素
https://stackoverflow.com/questions/40856017
复制相似问题