Datatables—如何在向表中添加新数据时停止服务器端绘制事件

Datatables—如何在向表中添加新数据时停止服务器端绘制事件,datatables,Datatables,我已经从服务器端加载了数据表,因为将有大量的数据集需要从服务器端加载 var table = $('#table').DataTable({ "processing": true, "serverSide": true, "ajax" : { "url": "...", "type": "POST" }, "columns": [ { "orderable": false, "data" : 'id',

我已经从服务器端加载了数据表,因为将有大量的数据集需要从服务器端加载

var table = $('#table').DataTable({ 
     "processing": true, 
     "serverSide": true, 
     "ajax" : { "url": "...", "type": "POST" }, 
     "columns": [ { 
        "orderable": false, 
        "data" : 'id', 
        "render" : function( data, type, meta ) 
                                 { return '..'; }
    },
    {
        "orderable": true,
        "data"     : ".."
    },
    {
        "orderable": true,
        "data"     : "..",
        "className": 'right-align'
    },
    {
        "orderable": true,
        "data"     : "..",
        "className": 'right-align'
    },
    {
        "orderable": false,
        "data"     : 'id',
        "defaultContent": "",
        "className": 'center-align',
        "render"   : function(data, type, meta) {

            return '..';
        }
    },
    {
        "orderable": false, // flags
        "data"     : {
            'inserted' : 'inserted',
            'deleted'  : 'deleted'
        },
        "defaultContent": "",
        "className"    : 'center-align',
        "render"   : '..'
        }
    }
],
'order': [
    [1, "asc"]
],
"language": {
    "lengthMenu": '..'
}
}))

我必须为这个表提供过滤功能(很少有复选框会在更改时触发post请求),所以我将过滤器发送到后端,它会给我新的数据集

$.post(url, { 'filters' : data} , function(collection){
     table.clear().draw();
     table.rows.add(JSON.parse(collection));
     table.columns.adjust().draw();
});
它总共触发了3个请求,一个是post请求,两个是draw请求(因为我画了两次)

根据服务器端的处理,表的每次绘制都会产生一个新的Ajax请求,以获取所需的数据。现在这个数据覆盖了我从过滤器中得到的数据

如何使用新数据集绘制表格?或者如何阻止服务器端ajax请求触发。

我尝试了preDrawCallback,它关闭了整个绘图功能

$('#table').dataTable( {
  "preDrawCallback": function( settings ) {
     return false;
  }
});
您可以使用指定发送到服务器的自定义参数,请参见下面的方法之一

$('#example').DataTable({
    "ajax": {
        "url": "data.json",
        "data": function (d){
            d.example_select = $('#example-select').val();
        }
    }
});
ajax.data
每次DataTables从服务器请求数据时都会调用回调函数

要在过滤器更改后从服务器重新加载数据,可以使用函数,例如:

$('#example-select').on('change', function(){
    $('#example').DataTable().ajax.reload(); 
});
有关演示,请参阅。

处理(即分页、排序、搜索)是通过不同的路由完成的,而过滤是通过不同的路由完成的。因此,我确实使用了ajax.data将过滤器发送到后端,每次更改时,我都会设置ajaxurl
table.ajax.url(url.load()
(它将从新url加载数据),如果选中零复选框,则我会设置回原始url@Gyrocode.com谢谢你的帮助