无法重新初始化DataTable - 数据表的动态数据

问题描述 投票:20回答:4

我有一个显示所有员工的数据表。它对document.ready的所有员工都很好。我有一个包含像'project_manager' & 'team_leader'这样的员工类型的选择标签,并且在更改员工类型时,我正在调用函数get_employees(emp_type)并传递所选的员工类型。

它在ajax响应中得到了理想和适当的数据,但却发出了警告

DataTables warning: table id=example - Cannot reinitialise DataTable. For more information about this error, please see http://datatables.net/tn/3

我试图摧毁它,但没有运气。

也尝试过

$('#example').dataTable().fnClearTable();
$('#example').dataTable().fnDestroy();

它是清除表并显示新附加的数据,但每次都添加具有列名的新排序图像。

这是我的代码片段。

$(document).ready(function() {
            get_employees('all');
        });

        function get_employees(emp_type)
        {
            $.ajax({
                url: '../ajax_request.php',
                type: "POST",
                data: {
                    action: "admin_get_all_employees",
                    type: emp_type
                },
                success: function(response) {
                    var response = jQuery.parseJSON(response);

                    // $('#example').destroy(); tried this but haven’t worked

                    $('#example').dataTable({
                        "aaData": response.data,
                    });
                }
            });
        }

提前致谢。

jquery ajax dynamic datatable destroy
4个回答
56
投票

在当前版本的DataTables(1.10.4)中,您只需将destroy:true添加到配置中,以确保在重新初始化之前已删除任何已存在的表。

$('#example').dataTable({
    destroy: true,
    aaData: response.data
});

4
投票

来自datatables的This tech note部分解释了此警告的原因。来自那里的相关信息:

当已初始化所选节点的DataTable实例时,通过将选项传递给DataTables构造函数对象来触发此错误。例如:

$('#example').dataTable( {
    paging: false
} );


$('#example').dataTable( {
    searching: false
} );

上述文档解释了处理此问题的两种方法。

  1. 检索:它解释了如何在初始化后应用其他选项(即使之前未初始化也可以工作),方法是将retrieve设置为true,如下所示:
table = $('#example').DataTable( {
    retrieve: true,
    paging: false
} );
  1. 销毁:在这种情况下,您可以通过调用table.destroy();然后再次创建表来显式销毁对象。或者您可以简单地传递destroy: true选项,如接受的答案中所述。 table = $('#example').DataTable( { paging: false } ); table.destroy(); table = $('#example').DataTable( { searching: false } );

使用destroy:true选项:

$('#example').DataTable( {
    destroy: true,
    searching: false } );

注意:如果您包含多次创建dataTable的javascript文件,也可能会发生此错误。我正在使用apache磁贴并将其包含在base和扩展定义中,这也导致了这个错误。


1
投票

尝试类似下面的内容

    var $table=$('#example').dataTable({
                    "aaData": response.data,
                });


    $table.fnDestroy();

1
投票

这对我有所帮助:

var table = $('#example').DataTable( {
    // Clear previous data
    destroy: true,
    // Load new data with AJAX from data.json file.
    ajax: "data.json" 
} );
© www.soinside.com 2019 - 2024. All rights reserved.