javascript - 如何根据 ajax 成功返回的数据追加一行?

标签 javascript php jquery mysql ajax

我有一个从数据库中检索数据并将其附加到 html 表的 ajax。但是,我想在特定条件下添加自定义行。这是我的 ajax 成功:

success  : function(response)
            {
                var tableData,t1,t2,t3;                 
                var count       = 0;

                $.each(response.result_pakai, function(index, rows_pakai){

                    //MONTHS
                    var arr_bln = ["", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"];

                    t1  = "<tr><td>"+arr_bln[rows_pakai.month]+"</td>";
                    t2  =     "<td align='center' class='col_thn'>"+rows_pakai.years+"</td>";
                    t3  =     "<td align='right' class='col_data'>xxx</td></tr>";

                    tableData += t1+t2+t3;

                    $('#t_pemakaian tbody tr').remove();
                    $('#t_pemakaian tbody').append(tableData);

                    count+=1;
                });
            }

所以,我想要每年的自定义行。这是我当前的 html 表格结果。

Month       year   data
Januari     2016     10
Februari    2016     75
Desember    2016     95
Januari     2017     47
April       2017     68

这是我所期望的:

Month       year   data
Januari     2016     10
Februari    2016     75
Desember    2016     95
     Total          180

Januari     2017     47
April       2017     68
     Total          115

应该在我的 AJAX 中的什么位置插入以下脚本?

<tr><td colspan='2' class='tr_total'>Total</td><td>&nbsp;</td></tr>

最佳答案

就我个人而言,我倾向于首先按年份将它们分组到一个新对象中,该对象可以存储那一年的行数据,并在存储它的同时增加那一年的总数。

然后迭代该新对象以构建表。在每年迭代结束时添加总行数

var arr_bln = ["", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"];

var data = [
{month:1, year: 2016, count: 10},
{month:2, year: 2016 , count:75},
{month:12, year:2016, count: 95},
{month:1, year:2017 , count: 47},
{month:4, year: 2017, count:  68}
];

// create a new object with years as keys
var yrsObj = data.reduce((a,c)=>{
   a[c.year] = (a[c.year] || {rows:[], total:0} );
   a[c.year].total += c.count;
   a[c.year].rows.push(c);
   return a
},{});
//console.log(yrsObj);

$.each(yrsObj, function(year, yObj){
   var dataRows = yObj.rows.map(function(rObj){
      var $row = $('<tr>'),
         $cells =['month', 'year','count'].map(function(key){
            var cellVal = (key === 'month') ? arr_bln[rObj.month] : rObj[key];
            return $('<td>', {text:cellVal})
         });
         $row.append($cells)
      return $row
   });
   var $totalRow = $('<tr>',{ class:"total"});
   $totalRow.append($('<td>',{text:'Total', colspan:2}).css('text-align','center'));    
   $totalRow.append($('<td>',{text:yObj.total}));
   
   dataRows.push($totalRow)
   $('table').append(dataRows)
})
.total{color:red}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <th>Month</th>
    <th>Year</th>
    <th>Data</th>
  </tr>
</table>

关于javascript - 如何根据 ajax 成功返回的数据追加一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43839447/

相关文章:

javascript - 如何使用 JavaScript 设置单选按钮状态

javascript - d3 : Optionally add child elements based on node content in force layout

php - mysqli 左连接重复行

javascript - 使用 knockout 将数组元素数据绑定(bind)为值

javascript - 拖动放置在 Canvas 中的缩放图像

javascript - Nivo 条形图轴标签重叠

javascript - 使用 Chai 检查数组中的所有元素

php - 减去数组值

php mysql 搜索错误无法执行查询

javascript - 使用 jQuery load() 加载多个 ID - 更好的方法