提问人:user9437856 提问时间:8/11/2020 最后编辑:user9437856 更新时间:8/15/2020 访问量:1997
使用服务器端时搜索和分页不起作用
Search and Pagination not working while using server-side
问:
我正在使用数据表服务器端。我正在使用 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
)
)
谁能帮我解决我的代码有什么问题?
答:
0赞
Gyrocode.com
8/15/2020
#1
问题
您已启用服务器端处理模式,该模式要求您处理脚本在服务器端执行的搜索、排序和分页。但是,您的脚本返回所有数据,这就是您看到所有结果而不仅仅是第一页的原因。serverSide: true
溶液
编写适当的服务器端处理代码或使用帮助程序库。
例如,DataTables 分发包括ssp.class.php帮助程序 calss 和示例脚本,以帮助生成响应(如果您使用的是 PHP)。
否则,您可以检查发送的参数,并根据请求参数对结果进行分页。
start
length
通过删除作为初始化选项切换到客户端处理模式,并返回服务器端响应中的所有数据。请记住,如果您有一个大型数据集(>10,000 条记录),则此解决方案并不理想。
serverSide: true
评论
0赞
user9437856
8/15/2020
感谢您的回答,让我实现这个
0赞
user9437856
8/15/2020
关于ssp.class.php。一个月前,我问过这个问题,但我没有解决方案 stackoverflow.com/questions/62708059/......
0赞
user9437856
8/15/2020
我尝试了lengthMenu:[[3,25,50,100,-1],[3,25,50,100,“All”]], “pageLength”:3,但仍然显示我的所有记录。
0赞
user9437856
8/17/2020
我删除了所有代码并引用了此链接 datatables.net/examples/server_side/simple.html。现在我得到了输出。但是我这个问题 stackoverflow.com/questions/63426594/......
评论
if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' )