2012-10-29 49 views
0

下面的代码是我从API接收到的JSON响应。不幸的是我不能改变这个响应的发送方式,我只能在Javascript/jQuery的范围内使用这个响应。将数组转换为HTML表的JSON对象

我的目标是将其转换为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响应只有一个阵列,即一行返回。

以上是从#2这样的几个其他问题改编的代码,我花了几天就这个问题和不能得到这些结果以表格显示......这是很多其他的只是一个例子被就跟返回这个例子,我将需要多次重用这个解决方案,这对我来说非常重要。

"ItemArray":{ 
     "id":"14" 
     ,"0": 
      {"id":"1","username":"guest","fname":"Guest","lname":"User","email":"[email protected]","group":"member","active":"0","url":null,"last_activity":null} 
     ,"1": 
      {"id":"2","username":"system","fname":"Internal","lname":"System","email":"[email protected]","group":"member","active":"0","url":null,"last_activity":null} 
     ,"2": 
      {"id":"3","username":"master","fname":"Super","lname":"Admin","email":"[email protected]","group":"member","active":"0","url":null,"last_activity":null} 
     ,"3": 
      {"id":"14","username":"apitest","fname":"API","lname":"Test","email":"[email protected]","group":"member","active":"0","url":null,"last_activity":"2012-10-29 02:48:43"} 
     } 
+0

你得到了JSON的例子吗? –

回答

1

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

for (var o in array) if (array.hasOwnProperty(o)) { 
    var row = array[o]; 
} 
+0

这个工作完美,完全是我期待的解决方案。 我已经适应了它,现在已经取得了很大的进步。 我会投它,如果我有代表,对不起! – Stoff

0

好的......问题是你的item数组被解析成一个对象。不是数组。 如果您将此日志记录为:

typeof array.length 

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

+0

谢谢,我试图找出它为什么被记录为未定义。 – Stoff