jquery – 使用带分页和排序的ajax动态地向datatable添加行

前端之家收集整理的这篇文章主要介绍了jquery – 使用带分页和排序的ajax动态地向datatable添加行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在努力实现 https://almsaeedstudio.com/themes/AdminLTE/pages/tables/data.html – “具有完整功能的数据表”

当我静态添加tbody时,分页和排序工作正常但是当我使用下面给出的jquery添加tbody时,会添加行但是分页和排序失败.

HTML

<table id="tblItems">
    <thead>
        <tr>
            <th>code</th>
            <th>Name</th>
            <th>Description</th>
            <th>Image</th>
            <th>Parent</th>
            <th>Location</th>
            <th>Category</th>
        </tr>
    </thead>
</table>

jQuery的

$(document).ready(function() {
    $('#tblItems').DataTable({
        "paging": true,"lengthChange": false,"searching": false,"ordering": true,"info": true,"autoWidth": false,"sDom": 'lfrtip'
    });
    $('#tblItems').append('<tbody><tr><td>asdsa34id</td><td> asdsa34id </td><td>asdsa34id </td><td> asdsa34id</td><td>asdsa34id</td><td>asdsa34id</td><td>asdsa34id</td></tr></tbody>');
});

https://jsfiddle.net/techjerk2013/vwpsxhaL/

更新的代码

尽管有来自响应的数据,但更新的代码不会填充表.虽然我将deferRender设置为true,但仍然是数据表为空.

$(document).ready(function() {
    PopulateItemsTable();
    BindTable();
});

function BindTable() {
    $("#tblItems").DataTable({
        "deferRender": true,"paging": true,"sDom": 'lfrtip'
    });
}

function PopulateItemsTable() {
    var txt = "";
    $.ajax({
        type: "POST",url: "Item.aspx/Search",contentType: "application/json; charset=utf-8",dataType: "json",success: function (response) {
            var jsonObject = JSON.parse(response.d);
            if (jsonObject) {
                var len = jsonObject.length;
                if (len > 0) {
                    for (var i = 0; i < len; i++) {
                        if (jsonObject[i].Id) {
                            Id = jsonObject[i].Id;
                        }
                        else {
                            Id = '';
                        }
                        if (jsonObject[i].Name) {
                            Name = jsonObject[i].Name;
                        }
                        else {
                            Name = '';
                        }
                        if (jsonObject[i].Description) {
                            Description = jsonObject[i].Description;
                        }
                        else {
                            Description = '';
                        }
                        if (jsonObject[i].Image) {
                            Image = jsonObject[i].Image;
                        }
                        else {
                            Image = '';
                        }
                        if (jsonObject[i].Parent) {
                            Parent = jsonObject[i].Parent;
                        }
                        else {
                            Parent = '';
                        }
                        if (jsonObject[i].Location) {
                            Location = jsonObject[i].Location;
                        }
                        else {
                            Location = '';
                        }
                        Category = '';

                        txt += "<tr><td>" + Id + "</td><td>" + Name + "</td><td>" + Description + "</td><td>" + Image + "</td><td>" + Parent + "</td><td>" + Location + "</td><td>" + Category + "</td></tr>";
                        $('#tblItems').append('<tbody>' + txt + '</tbody>');
                    }
                }
                else {
                    $("#tblItems").append("No records found");
                }

            }
        },failure: function () {
            $("#tblItems").append(" Error when fetching data please contact administrator");
        }
    });
}

回答

以下人员的帮助会得到解答,下面的代码按预期工作.

<script type="text/javascript">

    var myTable;

    $(document).ready(function () {
        BindItemTable();
        PopulateItemsTable();

    });

    function BindItemTable() {
        myTable = $("#tblItems").DataTable({
            "deferRender": true,"sDom": 'lfrtip'
        });
    }

    function PopulateItemsTable() {
        $.ajax({
            type: "POST",url: "ItemManagement.aspx/SearchIdList",success: function (response) {
                var jsonObject = JSON.parse(response.d);
                var result = jsonObject.map(function (item) {
                    var result = [];
                    result.push(item.Id);
                    result.push(item.Name);
                    result.push(item.Description);
                    result.push(item.Image);
                    result.push(item.Parent);
                    result.push(item.Location);
                    result.push("");
                    return result;
                });
                myTable.rows.add(result);
                myTable.draw();
            },failure: function () {
                $("#tblItems").append(" Error when fetching data please contact administrator");
            }
        });
    }
</script>

解决方法

不要直接将行添加到表标记,而是将其添加到DataTable实例,然后使用 .draw()方法.无论如何,添加到DataTable实例将在内部将其添加为tbody.这样的事应该做
var mytable = $('#tblItems').DataTable({
    "paging": true,"sDom": 'lfrtip'
});
mytable.row.add(['asdsa34id','asdsa34id','asdsa34id']);
mytable.draw();

这是一个演示https://jsfiddle.net/dhirajbodicherla/vwpsxhaL/1/

另请参阅其文档中的how to add rows to DataTable以供进一步参考

更新

您可以使用rows.add()(复数)并执行此类操作

var jsonObject = JSON.parse(response.d);
var result = jsonObject.map(function(item){
  var result = [];
  result.push(item.Id); 
  // .... add all the values required
  return result;
});
myTable.rows.add(result); // add to DataTable instance
myTable.draw(); // always redraw
var myTable;
$(document).ready(function() {
  myTable = $("#tblItems").DataTable({
    "deferRender": true,"sDom": 'lfrtip'
  });
  PopulateItemsTable();
});

function PopulateItemsTable() {
  $.ajax({
    type: "POST",success: function (response) {
      var jsonObject = JSON.parse(response.d);
      var result = jsonObject.map(function(item){
        var result = [];
        result.push(item.Id); 
        // .... add all the values required
        return result;
      });
      myTable.rows.add(result); // add to DataTable instance
      myTable.draw(); // always redraw
    }
  });
}

猜你在找的jQuery相关文章