DataTables重新加载具有不同pageLength参数的表

时间:2018-08-07 15:09:02

标签: pagination datatables

基于this问题。

我用以下代码初始化datatables.js表:

 var table_entity = $('#myTable').DataTable({
    "pageLength":getParameterByName('pageLength'),//getting param from query string
    fixedHeader: true,
     "ajax": {
         "url": myUrl,
          "data": function(d) {
                d.type = $('#mytype').val();
            }
     }
});

所以我知道如何用不同的ajax参数重新加载我的数据表。现在,我需要使用不同的pageLength参数重新加载它,该参数不属于ajax节,而是在数据表init阶段记录的。我尝试在重新加载过程中使用以下代码直接传递它:

table_entity.ajax.reload({
    "pageLength":77 //some new param different from the initial one
});

但是它不起作用,该表被重新加载了初始pageLength值。任何想法如何解决它都将受到欢迎。谢谢。

UPD_1

设法做到

第一个:完全破坏一个表:

$('#MyTable').DataTable().destroy();
$('#MyTable tbody').empty();//note tbody here

2nd:使用更新的参数重新初始化表:

table_data.displayStart   = Number(getParameterByName('displayStart'));
table_data.pageLength     = Number(getParameterByName('pageLength'));
table_data.iDisplayStart  = Number(getParameterByName('displayStart'));
table_data.iDisplayLength = Number(getParameterByName('pageLength'));

$('#MyTable').DataTable(table_data);

请注意2个参数-iDisplayStartiDisplayLength在这里

是否可以在ajax.reload阶段执行相同操作而不破坏表?谢谢。

1 个答案:

答案 0 :(得分:1)

  

是否可以在不破坏表的情况下执行相同的操作,但是   在ajax.reload阶段?

您可以加入xhr.dt事件并从那里更新page.len()。示例:

$('#example').on('xhr.dt', function(e, settings, json, xhr) {
  table.page.len(json.data.length).draw()
})

将动态设置页面长度为最大长度,即data的长度。演示-> http://jsfiddle.net/d72zbyus/

因此您可以使用table.page.len(77).draw()或其他任何方法。在每个AJAX请求之后触发xhr.dt

我不清楚您的新pageLength的确切来源。如果它是返回的JSON的一部分(我怀疑是这样),则可以执行table.page.len(json.pageLength).draw()