使用jQuery从Ajax响应构建表行(Json)

Can*_*hit 71 jquery json html-table

可能重复的嵌套元素

我从服务器端ajax响应(Json)得到,我正在尝试动态创建表行并将它们附加到现有表(ID :) #records_table;

我尝试以可能的重复方式实现解决方案,但失败了.

我的回答如下:

    "[{
      "rank":"9",
      "content":"Alon",
      "UID":"5"
     },
     {
       "rank":"6",
       "content":"Tala",
       "UID":"6"
    }]"
Run Code Online (Sandbox Code Playgroud)

需求结果是这样的:

<tr>
   <td>9</td>
   <td>Alon</td>
   <td>5</td>  
</tr>
<tr>
   <td>6</td>
   <td>Tala</td>
   <td>5</td>  
</tr>
Run Code Online (Sandbox Code Playgroud)

我想在不解析Json的情况下做一些事情,所以我尝试做以下事情,这当然是一场灾难:

    function responseHandler(response)
    {

        $(function() {
            $.each(response, function(i, item) {
                $('<tr>').html(
                    $('td').text(item.rank),
                    $('td').text(item.content),
                    $('td').text(item.UID)
                ).appendTo('#records_table');

            });
        });


    }
Run Code Online (Sandbox Code Playgroud)

从我的解决方案中,我只得到一行,所有单元格中的数字为6.我究竟做错了什么?

dri*_*zie 122

使用.append而不是.html

var response = "[{
      "rank":"9",
      "content":"Alon",
      "UID":"5"
     },
     {
       "rank":"6",
       "content":"Tala",
       "UID":"6"
    }]";

// convert string to JSON
response = $.parseJSON(response);

$(function() {
    $.each(response, function(i, item) {
        var $tr = $('<tr>').append(
            $('<td>').text(item.rank),
            $('<td>').text(item.content),
            $('<td>').text(item.UID)
        ); //.appendTo('#records_table');
        console.log($tr.wrap('<p>').html());
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 使用jQuery附加数据对大数据来说不是一个好主意.您将最终出现浏览器渲染问题.相反,我们可以使用join()生成截断的字符串来显示 (3认同)
  • 我更新了解决方案.您需要使用jQuery的$ .parseJSON函数将字符串转换为JSON.http://jsfiddle.net/abduncan/rrzZU/1/ (2认同)
  • 如果你查看底部的第4行,其中包含注释`//.appendTo('#records_table');`,它显示了如何将记录附加到DOM.它在这个答案中被注释掉,而结果被写入控制台以进行测试. (2认同)

Nee*_*ngh 36

试试这个(DEMO链接更新):

success: function (response) {
        var trHTML = '';
        $.each(response, function (i, item) {
            trHTML += '<tr><td>' + item.rank + '</td><td>' + item.content + '</td><td>' + item.UID + '</td></tr>';
        });
        $('#records_table').append(trHTML);
    }
Run Code Online (Sandbox Code Playgroud)

用AJAX演绎DEMO

  • 链接已过期. (2认同)

小智 11

以下是hmkcode.com的完整答案

如果我们有这样的JSON数据

// JSON Data
var articles = [
    { 
        "title":"Title 1",
        "url":"URL 1",
        "categories":["jQuery"],
        "tags":["jquery","json","$.each"]
    },
    {
        "title":"Title 2",
        "url":"URL 2",
        "categories":["Java"],
        "tags":["java","json","jquery"]
    }
];
Run Code Online (Sandbox Code Playgroud)

我们想在这个表结构中查看

<table id="added-articles" class="table">
            <tr>
                <th>Title</th>
                <th>Categories</th>
                <th>Tags</th>
            </tr>
        </table>
Run Code Online (Sandbox Code Playgroud)

以下JS代码将填充为每个JSON元素创建一行

// 1. remove all existing rows
$("tr:has(td)").remove();

// 2. get each article
$.each(articles, function (index, article) {

    // 2.2 Create table column for categories
    var td_categories = $("<td/>");

    // 2.3 get each category of this article
    $.each(article.categories, function (i, category) {
        var span = $("<span/>");
        span.text(category);
        td_categories.append(span);
    });

    // 2.4 Create table column for tags
   var td_tags = $("<td/>");

    // 2.5 get each tag of this article    
    $.each(article.tags, function (i, tag) {
        var span = $("<span/>");
        span.text(tag);
        td_tags.append(span);
    });

    // 2.6 Create a new row and append 3 columns (title+url, categories, tags)
    $("#added-articles").append($('<tr/>')
            .append($('<td/>').html("<a href='"+article.url+"'>"+article.title+"</a>"))
            .append(td_categories)
            .append(td_tags)
    ); 
});  
Run Code Online (Sandbox Code Playgroud)


小智 6

$.ajax({
  type: 'GET',
  url: urlString ,
  dataType: 'json',
  success: function (response) {
    var trHTML = '';
    for(var f=0;f<response.length;f++) {
      trHTML += '<tr><td><strong>' + response[f]['app_action_name']+'</strong></td><td><span class="label label-success">'+response[f]['action_type'] +'</span></td><td>'+response[f]['points']+'</td></tr>';
     }
    $('#result').html(trHTML); 
    $( ".spin-grid" ).removeClass( "fa-spin" );
  }
});
Run Code Online (Sandbox Code Playgroud)


tym*_*eJV 5

试试这样:

$.each(response, function(i, item) {
    $('<tr>').html("<td>" + response[i].rank + "</td><td>" + response[i].content + "</td><td>" + response[i].UID + "</td>").appendTo('#records_table');
});
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/R5bQG/


Cyb*_*tic 5

Data as JSON:

data = [
       {
       "rank":"9",
       "content":"Alon",
       "UID":"5"
       },
       {
       "rank":"6",
       "content":"Tala",
       "UID":"6"
       }
       ]
Run Code Online (Sandbox Code Playgroud)

You can use jQuery to iterate over JSON and create tables dynamically:

num_rows = data.length;
num_cols = size_of_array(data[0]);

table_id = 'my_table';
table = $("<table id=" + table_id + "></table>");

header = $("<tr class='table_header'></tr>");
$.each(Object.keys(data[0]), function(ind_header, val_header) {
col = $("<td>" + val_header + "</td>");
header.append(col);
})
table.append(header);

$.each(data, function(ind_row, val) {
row = $("<tr></tr>");
$.each(val, function(ind_cell, val_cell) {
col = $("<td>" + val_cell + "</td>");
row.append(col);
})
table.append(row);
})
Run Code Online (Sandbox Code Playgroud)

Here is the size_of_array function:

function size_of_array(obj) {
    size = Object.keys(obj).length;
    return(size)
    };
Run Code Online (Sandbox Code Playgroud)

You can also add styling if needed:

$('.' + content['this_class']).children('canvas').remove();
$('.' + content['this_class']).append(table);
$('#' + table_id).css('width', '100%').css('border', '1px solid black').css('text-align', 'center').css('border-collapse', 'collapse');
$('#' + table_id + ' td').css('border', '1px solid black');
Run Code Online (Sandbox Code Playgroud)

Result:

在此输入图像描述