尝试读取xml文件时为什么会得到未定义的值?

时间:2019-01-25 20:15:48

标签: javascript ajax xml html5

我试图从xml文件中读取数据并将其显示在html文件中,但是当我尝试显示我的值时,所有值都得到“未定义”值。 我对ajax和xml真的很陌生,所以请原谅我的代码,如果它太可怕了!如果有人得到一个简短的答复,我将不胜感激。

这是我的xml文件:

<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
    <gesmes:subject>Reference rates</gesmes:subject>
    <gesmes:Sender>
        <gesmes:name>European Central Bank</gesmes:name>
    </gesmes:Sender>
    <Cube>
        <Cube time="2019-01-25">
            <Cube currency="USD" rate="1.1346"/>
            <Cube currency="JPY" rate="124.72"/>
            <Cube currency="BGN" rate="1.9558"/>
            <Cube currency="CZK" rate="25.697"/>
            <Cube currency="DKK" rate="7.4664"/>
            <Cube currency="GBP" rate="0.86580"/>
                          ....

我的JavaScript代码:

function loadDoc() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            returndata(this);
        }
    };
    xhttp.open("GET", "rates.xml", true);
    xhttp.send();
}

function returndata(xml) {
    var i;
    var xmlDoc = xml.responseXML;
    var table="<tr><th>currency</th><th>rates</th></tr>";
    var x = xmlDoc.getElementsByTagName("Cube");
    for (i = 0; i <x.length; i++) {
        table += "<tr><td>" +
            x[i].getElementsByTagName("currency")[0] +
            "</td><td>" +
            x[i].getElementsByTagName("rate")[0] +
            "</td></tr>";
    }
    document.getElementById("demo").innerHTML = table;
}

当我单击按钮时,得到以下结果:

currency    rates
undefined   undefined
undefined   undefined
undefined   undefined
undefined   undefined    
.....

更新Javascript代码(固定):

function returndata(xml) {
    var i;
    var xmlDoc = xml.responseXML;
    var table="<tr><th>currency</th><th>rates</th></tr>";
    var x = xmlDoc.getElementsByTagName("Cube");
    for (i = 2; i <x.length; i++) {

          table += "<tr><td>" +
              x[i].getAttribute("currency") +
              "</td><td>" +
              x[i].getAttribute("rate") +
              "</td></tr>";

    }
    document.getElementById("demo").innerHTML = table;
}

现在它可以了,非常感谢,我从值2开始了我的变量,因为当我尝试进行一次(x!= null)这样的while循环时,我的网页仍然会永久加载然后崩溃。

我尝试过一个:

function returndata(xml) {
    var i;
    var xmlDoc = xml.responseXML;
    var table="<tr><th>currency</th><th>rates</th></tr>";
    var x = xmlDoc.getElementsByTagName("Cube");
    for (i = 0; i <x.length; i++) {
        while (x!=null) {
          table += "<tr><td>" +
              x[i].getAttribute("currency") +
              "</td><td>" +
              x[i].getAttribute("rate") +
              "</td></tr>";
        }
    }
    document.getElementById("demo").innerHTML = table;
}

0 个答案:

没有答案