DataTables未应用每页筛选

DataTables Not Applying per page filtering

本文关键字:筛选 应用 DataTables      更新时间:2023-09-26

我正在尝试使用DataTables服务器端处理

当前我将返回1000行(作为显示),即使显示设置为10、25等

jQuery:

$(document).ready(function() {
    $('#paginatedTableSS').dataTable( {
      "processing": true,
      "serverSide": true,
      "ajax": "script.php"
      } );
} );

script.php:

$i = 0;
$test = array();
$test['draw'] = 1;
$test['recordsTotal'] = 200000;
$test['recordsFiltered'] = 8;
$test['data'] = array();
while($i<=20){
  array_push($test['data'], ['test1 ' . $i, 'test2 ' . $i, 'test3 ' . $i, 'test4 ' . $i]);
  $i=$i+1;
}
echo json_encode($test);

我的最终目标是将start传递给脚本,以便脚本可以使用它返回正确的数据。但我认为,目前我需要解决上述问题,然后才能继续前进。但我不确定它出了什么问题,也不知道如何调试它。

aaData似乎表明您正在使用遗留数据表。如果是这样的话,那么就缺少了iTotalRecordsiTotalDisplayRecordssEcho

$test['iTotalRecords'] = count($test['aaData']);
$test['iTotalDisplayRecords'] = count($test['aaData']);
$test['Echo'] = $_REQUEST['sEcho'];

参见http://legacy.datatables.net/usage/server-side

如果您不使用遗留数据表,则需要使用datarecordsrecordsFiltered(如链接中所述)

编辑

表之所以显示1000行,是因为这是您返回的行数。使用lengthstart参数来确定返回哪些行,即

$start = (isset($_REQUEST['start']) && is_numeric($_REQUEST['start']))
    ? $_REQUEST['start'] : 0;
$length = (isset($_REQUEST['length']) && is_numeric($_REQUEST['length']))
    ? $_REQUEST['length'] : 100;
$test = array('data'=>array(), 'recordsTotal', 'draw', 'recordsFiltered');
for($i=$start; $i<=$length; $i++) {
  array_push($test['data'], array('id'=>$i,'date'=>$i,'status'=>$i,'options'=>$i));  
}
$test['recordsTotal'] = 200000;
$test['draw'] = 1;
$test['recordsFiltered'] = count($test['data']);
echo json_encode($test);