首页 > 解决方案 > 使用服务器端时搜索和分页不起作用

问题描述

我正在使用数据表服务器端。我正在使用 ajax 获取记录。我的问题是,搜索和分页不起作用。我正在获取搜索和分页以及所有数据。

请检查下图,我每页显示 10 条记录,但它显示了全部。

在此处输入图像描述

我在 StackOverflow 上查看了有关此主题的服务器问题。我几乎检查了每个问题,但仍然找不到解决方案。

我正在使用下面的代码

if($_REQUEST['action']=='adminList'){

$stmt = $pdo->prepare("SELECT count(*) FROM tbl_admin");
$stmt->execute();
$totalRecords = $stmt->fetchColumn();
$query="SELECT `admin_id`, `a_firstname`, `a_lastname`, `a_email`,  `date_of_created` FROM `tbl_admin` WHERE is_active = 1 order by date_of_created DESC";

try {
      $stmt = $pdo->prepare($query);
      $stmt->execute();
      $result = $stmt->fetchAll();
             
      $data['data'] = [];
      foreach ($result as $row) {

        $arr_result = array(
                    //"id" =>$i++,
                    "name" =>$row['a_firstname'].' '.$row['a_lastname'],
                    "email" => $row['a_email'],
                    "date_of_created" => $row['date_of_created'],
        );


        $data['data'][] = $arr_result;
                }

                
                }
                catch(PDOException $e) {
                    echo "Error: " . $e->getMessage();
                }

$json_data = array(  
"draw"=> intval( $_REQUEST['draw'] ),
"recordsTotal"    => intval($totalRecords),  
"recordsFiltered" => intval($totalRecords),
"data"            => $data['data']
);

// echo "<pre>";
 //print_r($json_data);
echo json_encode($json_data);
//exit();
}

JS

$(document).ready(function() {
  var dataTable = $('#adminList').DataTable({
    "processing": true,
    "serverSide": true,
    "paging": true,
    "searchable": true,
    "ajax": {
      url: "fetch.php",
      type: "post",
      data: {
        action: "adminList"
      }
    },
    language: {
      sLengthMenu: "Show _MENU_", // remove entries text
      searchPlaceholder: "Search",
      emptyTable: "No record found",
      search: ""
    },
    "pageLength": 10,
    "paging": true,
    "columns": [{
        "data": "name"
      },
      {
        "data": "email"
      },
      {
        "data": "date_of_created"
      }
    ]
  });
});

这是我的输出

Array
(
    [draw] => 1
    [recordsTotal] => 17
    [recordsFiltered] => 17
    [data] => Array
        (
    // getting my all records
)
)

谁能帮我解决我的代码有什么问题?

标签: phpjquerydatatablespaginationserver-side

解决方案


问题

您已启用服务器端处理模式,serverSide: true该模式要求您处理脚本在服务器端执行的搜索、排序和分页。但是,您的脚本会返回所有数据,这就是为什么您会看到所有结果而不仅仅是第一页。

解决方案

  1. 编写适当的服务器端处理代码或使用帮助程序库。

    例如,DataTables 分发包括ssp.class.php帮助程序和示例脚本,以帮助您在使用 PHP 时生成响应。

    否则,您可以检查发送的参数并根据startlength请求参数对结果进行分页。

  2. serverSide: true通过删除作为您的初始化选项并返回服务器端响应中的所有数据来切换到客户端处理模式。请记住,如果您有大型数据集(>10,000 条记录),此解决方案并不理想。


推荐阅读