重新加载多个DataTable的内容

时间:2012-03-28 17:24:56

标签: javascript jquery ajax datatable datatables

有人知道或了解如何重新加载页面内多个DataTable的内容吗? 这是我到目前为止初始化DataTable的代码:

$('.notifications_list_table').dataTable( {          
    "aaSorting": [[ 0,"desc" ]],         
    "sPaginationType": "full_numbers",           
    "aoColumns": [null,null],            
    "bLengthChange": false        
}); 

如您所见,我使用一个类来识别和初始化所有DataTable。现在我想在服务器上至少进行一次更改的内容时更新它们。

我怎么能这样做?我看到fnAjaxReload可以用来在一个DataTable中加载数据但是在这里,我想在一个ajax调用中获得多个“aaData”......

2 个答案:

答案 0 :(得分:2)

因此,除非您使用长轮询或websockets,否则客户端无法知道服务器端的更改。但您始终可以按设定的间隔更新;对于长时间间隔,请求的“费用”是微不足道的。对于短的间隔(每秒一次或其他),它变得更像是一个讨论点。

虽然DataTables站点有一些简化的例子,但在我看来,将初始化对象存储到变量是个好习惯:

var notificationTables = $('.notifications_list_table').dataTable( {          
    /* initialization parameters */      
}); 

现在只需在对象上调用正确的函数来更新表即可。我正在使用服务器端处理,所以我像这样重新绘制:

notificationTables.fnDraw(false);

示例代码中缺少的是您获取数据的方式。您提供的代码段假定数据已经在DOM中。所以我上面提供的代码实际上并没有做任何事情来获取新数据。

在我的申请中,我是这样做的(如果这不是最好的方式,我很高兴有人给我看一些更好的东西!没有自豪!):

  1. 我创建了一个包含所有表使用的参数的初始化对象。
  2. 我为每个具有自定义值的表(例如数据源URL,列标签,fnRowCallback函数等)创建一个单独的新对象,并将其与jQuery.extend()连接到基础对象,生成所有必需参数的新完整对象。
  3. 像这样初始化:var tableOne = $('#tableOne').dataTable(tableOneParams);(等;每个表一个)。
  4. 我只是单独调用更新。我的方法有点复杂,因为它有一些带有暂停/恢复和空闲检测内容的轮询机制,但它真的归结为一个有趣的版本:
  5. var getNewDT = function() {
      tableOne.fnDraw(false);
      tableTwo.fnDraw(false);
    };
    

    然后当我需要更新它们时,调用getNewDT()就会很简单。

    希望有所帮助。 ; - )

答案 1 :(得分:0)

我从未使用过数据表(但看起来很棒)。我猜你可以这么做......

  "sAjaxSource": "yourajax.php?tabid=" + $(this).attr('id')

作为参数,因此每个表都会使用不同的tabid调用yourajax.php,您可以在其中返回表特定数据