无法将此JSON加载到我的表中

时间:2017-12-04 22:14:58

标签: javascript json ajax

我有一件简单的事情:

有一个带有书籍对象的JSON,每本书都有一个标题,作者和年份。 我想从列表中选择一个选项,并在表格中显示所选属性。我使用了W3中的一个示例,但是现在我被卡住了,没有任何作用,因为它应该...

Link's here

function change_myselect(sel) {
    var obj, dbParam, xmlhttp, myObj, x, txt = "";
    obj = { "table":sel, "limit":20 };
    dbParam = JSON.stringify(obj);
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            myObj = JSON.parse(this.responseText);
            txt += "<table border='1'>"
            for (x in myObj) {
                txt += "<tr><td>" + myObj[x].name + "</td></tr>";
            }
            txt += "</table>" 
            document.getElementById("demo").innerHTML = txt;
        }
    };
    xmlhttp.open("GET", "generated.json", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send("x=" + dbParam);
}

2 个答案:

答案 0 :(得分:0)

使用调试器行很容易发现问题

console.log(myObj)

这是一个对象,你试图循​​环它。您希望循环遍历包含该数组的对象中的键。

console.log(myObj.books);

答案 1 :(得分:0)

您正在迭代对象中的单个属性books,而不是迭代属性包含的数组。

而不是:

for (x in myObj) {
  txt += "<tr><td>" + myObj[x].name + "</td></tr>";
}

尝试这样的事情:

myObj.books.forEach((book) => {
  txt += "<tr><td>" + book[sel.toLowerCase()] + "</td></tr>";
});