首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的xml请求不能正常工作?无法读取null的对象?

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

Stack Overflow用户
提问于 2016-11-29 08:45:59
回答 2查看 51关注 0票数 1

我正在尝试将数据从xml文件加载到表元素中,由于某些原因,当我调用xmldoc.getElementsByTagName时抛出一个错误,说它是null。这是我的xml文档

代码语言:javascript
复制
<?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函数

代码语言: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;
}
}
EN

回答 2

Stack Overflow用户

发布于 2016-11-29 09:02:43

XMLHttpRequest()是一个异步调用。在您的代码中,您不是在等待响应,而是尝试直接使用请求。在返回响应之前,请求将为空。

这是你应该如何处理它:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2016-11-30 01:55:08

问题是,当我将xml行附加到我的主变量时,我应该做的是附加我创建的名为"tr“的元素

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40856017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档