【问题标题】:Refresh Datatable with new data用新数据刷新数据表
【发布时间】:2017-08-21 10:28:28
【问题描述】:

我有一个使用 jQuery Datatable 的表。该表每 15 秒用新数据更新一次。我正在使用最新版本的数据表。

如何在不使用影响 UI 的 clear 方法的情况下使用新数据重新初始化 Datatable?

我的代码:

jQuery.ajax({
    type: 'POST',
    url: /list_tasks',
    data: ajaxData,
    spinner: true,
    success: function (response) {
        $('#task_table').html(response.html)
        if ( $.fn.DataTable.isDataTable('#task_table')) {
            $('#task_table').DataTable().destroy();
        }
        var dataTable=$('#task_table').DataTable({
            deferRender:true,
            destroy: true,
            scrollCollapse: true,
            scroller:       true,
            scrollY:        "200px",
            bFilter:false,
            bInfo: false,
            bLengthChange:false,
             initComplete: function(settings, json) {

            },
            fnDrawCallback:function(){

            }
        });        
    }   
});

【问题讨论】:

  • 试试这个dataTable.ajax.reload();
  • 你试过添加 jQuery Datatable 的 row api 吗?参考链接:https://datatables.net/examples/api/add_row.html

标签: javascript jquery datatables datatables-1.10


【解决方案1】:

您应该依赖ajax 功能中内置的dataTables,而不是重新发明轮子。如果你这样做了,你可以很容易地使用ajax.reload()更新表格:

var dataTable =$('#task_table').DataTable( {
   ajax: {
     url: '/list_tasks',
     data: ajaxData
   },
   deferRender:true,
   scrollCollapse: true,
   scroller:       true,
   scrollY:        "200px",
   bFilter:false,
   bInfo: false,
   bLengthChange:false,
   initComplete: function(settings, json) {
   }, 
   fnDrawCallback:function(){
   }
});  

setInterval(function() {
  dataTable.ajax.reload()
}, 15000);

更新。如果您重复地向 DOM 注入和删除表,然后将其实例化为 dataTable,您将永远无法防止闪烁或对 UI 的影响。另一种方法可能是将表格代码分隔在不同的 PHP 脚本中,并将其放在 iframe 中:

<iframe src="table.php" id="table"></iframe>

然后每 15 秒更新一次 iframe 本身:

setInterval(function() {
  $('#table')[0].contentWindow.location.reload(true);
}, 15000);

【讨论】:

  • HTML 表格正在使用服务器端模板构建,因此无法使用 datatable.ajax
  • @pareshm,为什么不趁机不创建整个表标记服务器端?它肯定会运行得更快并提供更流畅的流程,即不会影响 UI。这很容易。这是一个示例 jsfiddle.net/0f9Ljfjr/957
  • 不能做,因为目前在来自服务器端的那个表上完成了许多类和操作,全新的方法在不使用 Datatable 之前非常耗时,现在要介绍
  • @pareshm,好的 - 但如果重复删除表格并将表格插入 DOM,您将永远无法防止闪烁或对 UI 的影响。我唯一能想到的是将表逻辑放在 iframe 中。查看更新。
猜你喜欢
  • 2016-07-25
  • 2014-08-22
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2013-12-07
  • 1970-01-01
相关资源
最近更新 更多