javascript - 为什么我的 xml 请求不能正常工作?无法读取 null 对象?

标签 javascript xml

我正在尝试将数据从 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;
}
}

最佳答案

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);
}

这尚未经过测试,但它应该可以给您一个想法。更多信息参见答案here或文档 here

关于javascript - 为什么我的 xml 请求不能正常工作?无法读取 null 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40856017/

相关文章:

android - 如何使 3D 图像按钮透明并将图像缩放 40dp x 40dp?安卓, XML

c# - 每天将大量 XML 数据(> 1Gb)导入 SQL Server 2008

xml - BizTalk 信封架构自关闭节点

xml - 在 node.js 中将 xml 转换为 json

xml - 是否所有 MS Word 文档都以 XML 可读格式序列化?

JavaScript/MomentJS : normalizing dates to current year

javascript - 如何预测跨 Promise.then 链的微任务顺序?

javascript - 无法在html中添加垂直滚动条?

javascript - Knockoutjs 嵌套的 observableArrays

javascript - 点击目标