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


98

我正在使用插件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' }
    ]
});

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


如何删除现有表主体并创建新表主体?
记者2015年

Answers:


177

解决方案:(注意:此解决方案仅适用于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();
});

API参考:

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

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

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


4
这太难找到了,非常感谢!使用它在服务器往返之间持久化数据表。
道格

关于数据表版本1.9.4呢,我面临着同样的问题
Hardik Masalawala

4
我只想补充一点,您也可以链接方法(即datatable.clear().rows.add(newDataArray).draw())。就此评论而言,我正在使用版本1.10.18
Sal_Vader_808 '19

如何使用按钮控件添加一列
ajinkya

30

您可以使用:

$('#table').dataTable().fnClearTable();
$('#table').dataTable().fnAddData(myData2);

Jsfiddle

更新。是的,当前的文档并不是很好,但是如果您可以使用较早的版本,您可以参考旧文档


是的,您是对的,但是我使用的是最新版本的数据表。无论如何,我找到了解决方案并更新了我的问题。感谢您的关注:)
Indy 2015年

1
@CookieMan,请删除您的修改并将其发布为答案。之后,将其标记为已接受。
记者

该解决方案不更新分页部分
Alok Deshwal

8

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

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

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

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

    $('#dataTableExample').DataTable({
        responsive: true,
        destroy: true
    });

5

这是遗留数据表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);

这适用于最新版本(请考虑评论日期)。谢谢Vikas!
Telmo

这对我有用。但是我不明白为什么我可以使用所有这些示例:var datatable = $(选择器).DataTable(); var datatable = $(选择器).dataTable()。api(); var datatable = new $ .fn.dataTable.Api(选择器); 但是添加.row()。add()时不起作用。
费尔南多·帕尔马

4

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

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

然后我用on加载方法实例化表

$(function () {
            //.... some code here
            table = $("#detailReportTable").DataTable();
            .... more code here
        });

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

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

我希望有人觉得这有用!


2
每次往返都破坏整个表非常昂贵,并且状态也会丢失。您应考虑保留表状态的已接受答案。
nhaberl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.