首页 > 解决方案 > Datatables AJAX.reload 回调数据

问题描述

使用 Datatables(版本:1.10.16)时,我注意到 API 中的数据不会通过ajax.reload回调立即更新,即使网站说在新数据到达并重新绘制之前不会调用回调。

前面的注释:

  1. 所有数据格式正确并显示在 之前和之后的表中ajax.reload,包括重新加载的新数据。
  2. 如果我单击重新加载两次,api 会正确看到新数据并ApplyHeaderFilters正常工作。

当我说 API 正确查看数据时,我的意思是这样的: $('#dtTbl').DataTable().column('1:visible').data().unique()

ApplyHeaderFilters是回调 onajax.reload并使用上面的 JS 命令从列中获取唯一值。从 JS 命令返回的数据不反映从重新加载返回的新数据。

这是在准备好的文档中:

    batchDT = $('#dtTbl').DataTable( {
        deferLoading: true,
        pageLength: 25,
        pagingType: 'simple_numbers',
        scrollx: true,
        initComplete: function () {
            ApplyHeaderFilters($(this).attr('id'), this.api());
        },
        ajax: {
            url: "mysite.cfm?method=gettabledata", 
            type: 'POST'
        },
        columns: [
            { title: "Description", name: "description", data: "description"},
            { title: "Is Active", name: "isactive", data: "isactive"},
            { title: "List Item ID", name: "listitemid", data: "listitemid"},
            { title: "Name", name: "name", data: "name"},
            { title: "Table Ref ID", name: "tablerefid", data: "tablerefid", orderable: false}
        ]
    } );

    $("#reload").on('click',function(){
        batchDT.ajax.reload(ApplyHeaderFilters('dtTbl', $('#dtTbl').DataTable()));
    });

标签: datatables

解决方案


由于某种原因,在重新加载完成之前调用了回调。我通过在匿名函数中重新加载我的回调函数来解决这个问题。如果有人知道为什么会这样,请发表评论。我感觉它与闭包以及它们如何处理数据表库中的回调有关。

$("#reload").on('click',function(){
    batchDT.ajax.reload(function(){
          ApplyHeaderFilters('dtTbl', $('#dtTbl').DataTable());
    });
});

推荐阅读