[英]dataTable switch to next page with no entry - paging issue
我想使用帶有服務器端分頁的 dataTables 中的表在監視器上顯示來自 mysql 數據庫的記錄。 每邊的最大行數應為 14。當填滿數據庫並到達第 14 行時,表已經開始分頁 (.) 顯示消息“未找到匹配的記錄”......然后它切換回 1-14 的頁面行....
知道我在這里做錯了什么嗎?
我的代碼如下:
php頁面創建json數組
//fetch.php
$connect = new PDO("mysql:host=localhost;dbname=eflightbook", "root", "");
$column = array("usersName", "usersFirstname", "fldirector");
$query = "SELECT usersName, usersFirstname, TIME(date), fldirector, t1.*
FROM users, flightbook t1
WHERE usersLoginStatus <> 'false'
AND id = anw_id
AND t1.date = (SELECT MAX(t2.date)
FROM users, flightbook t2
WHERE t2.anw_id = t1.anw_id)
";
if(isset($_POST['order']))
{
$query .= 'ORDER BY '.$column[$_POST['order']['0']['column']].' '.$_POST['order']['0']['dir'].' ';
}
else
{
$query .= 'ORDER BY TIME(date) ASC ';
}
$query1 = '';
if($_POST['length'] != -1)
{
$query1 = 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}
$statement = $connect->prepare($query);
$statement->execute();
$number_filter_row = $statement->rowCount();
$result = $connect->query($query . $query1);
$data = array();
foreach($result as $row)
{
$sub_array = array();
$sub_array[] = $row['usersName'];
$sub_array[] = $row['usersFirstname'];
$sub_array[] = $row['TIME(date)'];
$sub_array[] = ($row['fldirector'] == "1") ? "✔" : "";
$data[] = $sub_array;
}
function count_all_data($connect)
{
$query = "SELECT anw_id, usersName, usersFirstname, TIME(date), fldirector, t1.*
FROM users, flightbook t1
WHERE usersLoginStatus <> 'false'
AND id = anw_id
AND t1.date = (SELECT MAX(t2.date)
FROM users, flightbook t2
WHERE t2.anw_id = t1.anw_id)
";
$statement = $connect->prepare($query);
$statement->execute();
return $statement->rowCount();
}
$output = array(
"draw" => intval($_POST["draw"]),
"recordsTotal" => count_all_data($connect),
"recordsFiltered" => $number_filter_row,
"data" => $data
);
echo json_encode($output);
?>
**Monitor html/php Page**
<script>
// Active Pilots Table
$(document).ready(function(){
function load_data(start, length)
{
var dataTable = $('#datatable').DataTable({
"processing" : false,
"serverSide" : true,
"pageLength" : 14,
"lenghtChange" : false,
"language": {
"emptyTable": "** kein Eintrag **"},
"columnDefs": [
{
targets: -1,
className: 'dt-body-center'
}],
"responsive" : false,
"autoWidth" : false,
"ordering" : false,
"searching" : false,
"scrollCollapse" : true,
"binfo" : false,
"bFilter" : false,
"bLengthChange" : false,
dom: "lfrti",
"order" : [],
"retrieve": true,
"ajax" : {
url:"activep.php",
method:"POST",
data:{start:start, length:length}
},
"drawCallback" : function(settings){
var page_info = dataTable.page.info();
console.log(page_info);
}
});
}
load_data();
var table = $('#datatable').DataTable();
setInterval(function(){
var info = table.page.info();
if (info.start < info.end) {
var page_number = (info.page < info.pages) ? info.page + 1 : 1;
}
else {
page_number = 0;
}
;
table.page(page_number).draw(false);
}, 6000);
});
你的問題在這里:
var info = table.page.info();
if (info.start < info.end) {
var page_number = (info.page < info.pages) ? info.page + 1 : 1;
}
else {
page_number = 0;
}
;
table.page(page_number).draw(false);
有兩個問題。 首先,具體回答您的問題:假設info.page
等於info.pages
(這意味着您有一頁記錄),您將頁碼設置為 1,但該屬性的索引為 0 (以及此處的文檔) ,所以你實際上是在將它強制到第二頁:
var page_number = (info.page < info.pages) ? info.page + 1 : 1;
然后,您將該頁碼值傳遞給您的表:
table.page(page_number).draw(false);
第二個問題(這不是你的具體問題的原因,但在變量范圍方面肯定是有問題的):你在if
語句的 scope 內定義了page_number
變量,然后在 scope 之外使用它。這種類型的變量應避免聲明。 您應該在if
語句之外聲明變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.