DataTables不应用每页过滤

时间:2014-08-26 19:51:59

标签: javascript php jquery ajax datatable

我正在尝试使用DataTables Server Side Processing

目前,即使显示器设置为10,25等,我也会获得1000行(作为显示)

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传递给脚本,以便脚本可以使用它来提供正确的数据。但是目前我需要在前进之前解决上述问题。但我不确定它有什么问题或如何调试它。

1 个答案:

答案 0 :(得分:1)

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);