【问题标题】:Reload contents of multiples DataTable's重新加载多个数据表的内容
【发布时间】:2012-03-28 17:24:55
【问题描述】:

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

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

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

我该怎么做?我看到 fnAjaxReload 可用于在一个 DataTable 中加载数据,但在这里,我想在一个 ajax 调用中获取多个“aaData”...

【问题讨论】:

    标签: javascript jquery ajax datatable datatables


    【解决方案1】:

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

    虽然 DataTables 网站有一些简化的示例,但在我看来,将初始化对象存储到变量中是一种很好的做法:

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

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

    notificationTables.fnDraw(false);
    

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

    在我的应用程序中,我是这样做的(如果这不是最好的方法,我很高兴有人向我展示更好的东西!这里没有骄傲!):

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

    然后当我需要更新它们时,只需拨打getNewDT()即可。

    希望能有所帮助。 ;-)

    【讨论】:

    • 好的,但是我不能通过 jquery 类对象只使用一次对 DataTable 函数的调用吗?我知道我可以将设置保存在一个变量中并为每个表调用 DataTable 的函数,但如果可能的话,我想只调用一次;)。
    • 啊,顺便说一下,我正在使用短轮询请求(因为服务器)。我没有展示如何获取数据,因为我不知道如何只进行一次 AJAX 调用并根据 AJAX 调用的 JSON 结果更新 3 个或更多 DataTable...
    • 试图从一个 JSON 数据集中填充 3 个不同的数据表将是一场噩梦。由于无论如何每个表都将具有某些独特的参数,因此我认为这是一种过度设计的解决方案,试图一次性完成所有操作。 DataTables 与服务器来回交换某些参数;在嵌套更深一层的 JSON 中访问它们至少需要一些工作。我的建议是只进行 3 次以上的调用,吃掉少量的 HTTP 开销,然后开心就好。 ;-) 我有一个应用程序每秒大约生成 5 次 GET,这只是一个昙花一现。
    • 我发现我可以将表格分成不同的“选项卡”,然后在用户单击其中一个“选项卡”时加载每个表格。使用该解决方案,我只需要为可见数据表加载一组结果 =)。不管怎么说,还是要谢谢你。这为我指明了正确的方向 =)。
    • 没问题!如果不需要一次查看所有选项卡,则选项卡是一个很好的解决方案。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      相关资源
      最近更新 更多