php - 使用服务器端时搜索和分页不起作用
问题描述
我正在使用数据表服务器端。我正在使用 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
)
)
谁能帮我解决我的代码有什么问题?
解决方案
问题
您已启用服务器端处理模式,serverSide: true
该模式要求您处理脚本在服务器端执行的搜索、排序和分页。但是,您的脚本会返回所有数据,这就是为什么您会看到所有结果而不仅仅是第一页。
解决方案
编写适当的服务器端处理代码或使用帮助程序库。
例如,DataTables 分发包括ssp.class.php帮助程序和示例脚本,以帮助您在使用 PHP 时生成响应。
否则,您可以检查发送的参数并根据
start
和length
请求参数对结果进行分页。serverSide: true
通过删除作为您的初始化选项并返回服务器端响应中的所有数据来切换到客户端处理模式。请记住,如果您有大型数据集(>10,000 条记录),此解决方案并不理想。
推荐阅读
- java - 如何在 Spring Boot 中到达控制器之前修改请求正文
- android - recyclerview 项目之间的距离
- python - 你如何用 cython 编译烧瓶应用程序?
- r - 将列名中具有多个键的数据框从宽变为长
- sql - 根据不同的行检索数据
- owin - 将 Application Insights cloud_RoleName 分配给使用 OWIN 运行的 Windows 服务
- business-intelligence - BOBI4.2中“启动服务器”选项不显示
- python-3.x - 即使在打开后对关闭的文件进行 I/O 操作
- amazon-web-services - 即使没有达到最大并发数(1000),lambda 也会返回限制错误
- gcc - GCC:找不到 iostream 编译错误