0

下面的代码是我从 API 收到的 JSON 响应。不幸的是,我无法更改此响应的发送方式,我只能在 Javascript/jQuery 范围内使用此响应。

我的目标是将其转换为 HTML 表格。

我自己已经尝试过这样做;

function CreateTableView(objArray, theme, enableHeader) {
    // set optional theme parameter
    if (theme === undefined) {
        theme = 'mediumTable'; //default theme
    }

    if (enableHeader === undefined) {
        enableHeader = true; //default enable headers
    }

    // If the returned data is an object do nothing, else try to parse
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;

    var str = '<table id="res" class="' + theme + '">';

    // table head
    if (enableHeader) {
        str += '<thead><tr>';
        for (var index in array[0]) {
            str += '<th scope="col">' + index.toUpperCase() + '</th>';
        }
        str += '</tr></thead>';
    }

    // table body
    str += '<tbody>';
    for (var i = 0; i < array.length; i++) {
        str += (i % 2 == 0) ? '<tr class="alt" id="' + array[i]['id'] + '">' : '<tr id="' + array[i]['id'] + '">';
        for (var index in array[i]) {
            str += '<td style="width:15%;">' + htmlspecialchars_decode(array[i][index]) + '</td>';
        }
        str += '<td><a href="#" onClick="editPerson(' + array[i]['id'] + ');">Edit</a></td><td><a href="#" onClick="delPerson(' + array[i]['id'] + ');">Delete</a></td></tr>';
    }
    str += '</tbody>'
    str += '</table>';
    return str;
}

但是我只能让标题显示......但如果 JSON 响应只有一个数组,即返回一行,它会很好地工作。

上面的代码改编自 Stackoverflow 上类似这样的其他几个问题,我在这上面花了几天时间,无法让这些结果显示在表格中......这只是像这个例子一样返回的许多其他例子中的一个,我将需要多次重复使用此解决方案,这对我来说非常重要。

"ItemArray":{
        "id":"14"
        ,"0":
            {"id":"1","username":"guest","fname":"Guest","lname":"User","email":"example@domain.com","group":"member","active":"0","url":null,"last_activity":null}
        ,"1":
            {"id":"2","username":"system","fname":"Internal","lname":"System","email":"example@domain.com","group":"member","active":"0","url":null,"last_activity":null}
        ,"2":
            {"id":"3","username":"master","fname":"Super","lname":"Admin","email":"example@domain.com","group":"member","active":"0","url":null,"last_activity":null}
        ,"3":
            {"id":"14","username":"apitest","fname":"API","lname":"Test","email":"user@domain.com","group":"member","active":"0","url":null,"last_activity":"2012-10-29 02:48:43"}
        }
4

2 回答 2

1

你不能使用array.length对象,所以你需要:

for (var o in array) if (array.hasOwnProperty(o)) {
    var row = array[o];
}
于 2012-10-29T09:18:58.863 回答
0

好的...问题是您的项目数组被解析为一个对象。不是数组。如果你记录这个:

  typeof array.length

结果未定义。所以你的循环不会运行。

于 2012-10-29T08:52:42.200 回答