如何使用新的JSON数据手动更新datatables表

cov*_*efe 87 jquery datatables jquery-datatables

我正在使用插件jQuery数据表并加载我在页面底部的DOM中加载的数据并以这种方式启动插件:

var myData = [
    {
        "id": 1,
        "first_name": "John",
        "last_name": "Doe"
    }
];

$('#table').dataTable({
    data: myData
        columns: [
        { data: 'id' },
        { data: 'first_name' },
        { data: 'last_name' }
    ]
});
Run Code Online (Sandbox Code Playgroud)

现在.在执行某些操作后,我想使用ajax获取新数据(但不是在数据表中构建ajax选项 - 不要误解我!)并使用这些数据更新表.我怎么能用datatables API做到这一点?文档非常混乱,我找不到解决方案.任何帮助将非常感谢.谢谢.

cov*_*efe 162

解决方案:(注意:此解决方案适用于数据表版本1.10.4(目前)而不是旧版本).

澄清根据API文档(1.10.15),可以通过三种方式访问​​API:

  1. DataTables的现代定义(上层驼峰案例):

    var datatable = $( selector ).DataTable();

  2. DataTables的遗留定义(较低的驼峰案例):

    var datatable = $( selector ).dataTable().api();

  3. 使用new语法.

    var datatable = new $.fn.dataTable.Api( selector );

然后像这样加载数据:

$.get('myUrl', function(newDataArray) {
    datatable.clear();
    datatable.rows.add(newDataArray);
    datatable.draw();
});
Run Code Online (Sandbox Code Playgroud)

API参考:

https://datatables.net/reference/api/clear()

https://datatables.net/reference/api/rows.add()

https://datatables.net/reference/api/draw()

  • 这太难找了,非常感谢!使用它来保持服务器往返之间的数据表. (4认同)
  • 我只是想补充一点,您也可以链接方法(即`datatable.clear()。rows.add(newDataArray).draw()`)。截至本文评论,我正在使用版本1.10.18 (4认同)

Vla*_*irs 28

您可以使用:

$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

更新.是的当前文档并不是那么好,但如果你可以使用旧版本,你可以参考旧文档.


小智 6

这是旧数据表 1.9.4 的解决方案

    var myData = [
      {
        "id": 1,
        "first_name": "Andy",
        "last_name": "Anderson"
      }
   ];
    var myData2 = [
      {
        "id": 2,
        "first_name": "Bob",
        "last_name": "Benson"
      }
    ];

  $('#table').dataTable({
  //  data: myData,
       aoColumns: [
         { mData: 'id' },
         { mData: 'first_name' },
         { mData: 'last_name' }
      ]
  });

 $('#table').dataTable().fnClearTable();
 $('#table').dataTable().fnAddData(myData2);
Run Code Online (Sandbox Code Playgroud)


小智 6

您需要销毁旧的数据表实例,然后重新初始化数据表

首先使用$ .fn.dataTable.isDataTable检查数据表实例是否存在

如果存在,则销毁它,然后像这样创建新实例

    if ($.fn.dataTable.isDataTable('#dataTableExample')) {
        $('#dataTableExample').DataTable().destroy();
    }

    $('#dataTableExample').DataTable({
        responsive: true,
        destroy: true
    });
Run Code Online (Sandbox Code Playgroud)


小智 5

就我而言,我没有使用内置的 ajax api 将 Json 提供给表(这是由于某些格式在数据表的渲染回调中很难实现)。

我的解决方案是在 onload 函数和处理数据刷新的函数(var table = null例如)的外部范围内创建变量。

然后我在加载方法中实例化我的表

$(function () {
            //.... some code here
            table = $("#detailReportTable").DataTable();
            .... more code here
        });
Run Code Online (Sandbox Code Playgroud)

最后,在处理刷新的函数中,我调用 clear() 和 destroy() 方法,将数据提取到 html 表中,并重新实例化数据表,如下所示:

function getOrderDetail() {
            table.clear();
            table.destroy();
            ...
            $.ajax({
             //.....api call here
            });
            ....
            table = $("#detailReportTable").DataTable();
   }
Run Code Online (Sandbox Code Playgroud)

我希望有人觉得这很有用!

  • 在每次往返时销毁整个表是相当昂贵的,并且状态也会丢失。您应该考虑保留表格状态的已接受答案。 (2认同)