重新加载数据后,JQuery AJAX DataTable无法加载标准函数

时间:2017-01-19 15:55:31

标签: javascript php jquery ajax datatables

我已将DataTables添加到表中,我使用PHP和SQL通过AJAX获取数据。在第一次加载时,执行第一次搜索后,一切正常,一切正常。但是,当第二次搜索时,在用于搜索的所有代码再次运行时,DataTable功能似乎停止工作。

我在DataTable文件的关键部分添加了一些警报,并在第一次搜索后发现它永远不会重新进入文件。

我可能需要“重新初始化”DataTable,因为在我再次搜索之后,整个数据内容都发生了变化。

花了很长时间在网上看,有许多关于Destroy和Clear等的建议但似乎没有任何效果。

这是我的代码,你可以看到我在第一次搜索后设置了不同的东西,但不知道如何修复它,因为排序,分页,搜索等都不起作用:

$.ajax({
    type:'POST',
    url:'/ITSMIS/data/asset/search.php',
    data:HardwareAsset,
    dataType: "html",
    success:function(data){

        LoadDataTableHeaders();

        var NotSearched = document.getElementById("no-search-default");
        var TableContainer = document.getElementById("data-table-container");
        var NoSearchResults = document.getElementById("no-search-results");

        if(NotSearched.style.display !== 'none'){
            $(NotSearched).hide();
        }
        if(data){
            if(TableContainer.style.display == 'none'){
                $(TableContainer).show();
            }
            $(NoSearchResults).hide();
            $('#data-table-results').html(data);

            $("input:checkbox:not(:checked)").each(function() {
                var DataTableColumn = "table ." + $(this).attr("name");
                $(DataTableColumn).remove();
            });

            if ( ! $.fn.DataTable.isDataTable( '#data-table' ) ) {
                $('#data-table').DataTable();
            }
            else{

            }
        }
        else{
            if(NoSearchResults.style.display == 'none'){
                $(TableContainer).hide();
                $(NoSearchResults).show();
            }   
        }
    }
})

2 个答案:

答案 0 :(得分:1)

这应该在表已经退出时使表无效并重绘 (我发现这个后添加了'完全休息'参数:https://datatables.net/reference/api/draw()

if (  $.fn.DataTable.isDataTable( '#data-table' ) ) {
     $('#data-table').DataTable().rows().invalidate().draw('full-reset');
 }
 else{
      $('#data-table').DataTable();
 }

答案 1 :(得分:1)

您可以尝试通过调用

简单地重新初始化数据表
$('#data-table').DataTable({
    destroy: true
});

此选项将允许Datatables销毁先前的实例(如果存在),并初始化,就像它是第一次一样。