Datatable jquery数据表除第一页外未分页
我有一个带有服务器端处理的数据表。 数据来自预期的表,但不按datatable分页。我在调试中看到数据库aaData的总记录计数14,它将显示为5, 所以我预计会有3页。。但只显示了1页和5行 这是我的表格html:Datatable jquery数据表除第一页外未分页,datatable,datatables,Datatable,Datatables,我有一个带有服务器端处理的数据表。 数据来自预期的表,但不按datatable分页。我在调试中看到数据库aaData的总记录计数14,它将显示为5, 所以我预计会有3页。。但只显示了1页和5行 这是我的表格html: <table style="text-align: center" class="table table-striped table-bordered table-hover" id="usersTable"> <thead
<table style="text-align: center" class="table table-striped table-bordered table-hover" id="usersTable">
<thead>
<tr>
<th>
User Name
</th>
<th>
Account
</th>
<th>
Enable
</th>
<th>
Remark
</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
和数据表def:
var tableObject = $("#usersTable").dataTable({
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "../../Controller/UserManagementControllercopy.php5",
"aoColumns": [
{ "mDataProp": "0", "sWidth": "40%", "bSearchable": false },
{ "mDataProp": "1", "sWidth": "20%"},
{ "mDataProp": "3", "sWidth": "20%" },
{ "mDataProp": "2", "sWidth":"20%" }
],
"fnServerData": function (sSource, aoData, fnCallback){
$.ajax({
"dataType": "json",
"contentType": "application/json; charset=utf-8",
"type": "GET",
"url": sSource,
"data": aoData,
"success": function(result){
fnCallback(result);
},
error: function (xhr, textStatus, error){
debugger
if (typeof console == "object") {
console.log(xhr.status + "," + xhr.responseText + "," + textStatus + "," + error);
}
}});
},
"oLanguage": {
"sLengthMenu": '<select>' +
'<option value="5">5</option>' +
'<option value="10">10</option>' +
'<option value="20">20</option>' +
'<option value="30">30</option>' +
'<option value="40">40</option>' +
'<option value="50">50</option>' +
'</select> Show'
},
"fnDrawCallback": function(){
},
"aaSorting": [
[1, 'asc']
],
"aLengthMenu": [
[5, 15, 20, -1],
[5, 15, 20, "All"] ],
"iDisplayLength": 5
});
和服务器代码:
$aColumns = array( 'USERNAME', 'ACCOUNT', 'REMARK', 'ENABLE');
$sQuery = " SELECT USERNAME,ACCOUNT,REMARK,ENABLE FROM users LIMIT ".$_GET['iDisplayStart'].", ".$_GET['iDisplayLength'].";";
$dbObject = Connection::getConnection();
$request = $dbObject->dbh->prepare($sQuery);
if ($request->execute())
{
$resultData["Data"] = $request->fetchAll(PDO::FETCH_ASSOC);
$sQuery = "SELECT COUNT(USERNAME) FROM users";
$request = $dbObject->dbh->prepare($sQuery);
$request->execute();
$iTotal = $request->fetchColumn(0);
$output = array(
"sEcho" => intval($_GET['sEcho']),
"iTotalRecords" => intval($iTotal),
"iTotalDisplayRecords" => intval($_GET['iDisplayLength']),
"aaData" => array()
);
for ( $j=0 ; $j<count($resultData["Data"]) ; $j++ )
{
$aRow = $resultData["Data"][$j];
$row = array();
$output["Success"]=true;
echo json_encode($output);
}
在这里,从datatable的get请求返回的数据看起来是:
chrome开发者控制台
您为json数组中的iTotalDisplayRecords返回了错误的值。它应该是过滤后的总记录数,即应用过滤后的记录总数,而不仅仅是此结果集中返回的记录数 请参阅并参考此
@Vishan您好,我在服务器端更改了如下代码:。。。iTotalRecords=>intval$iTotal,iTotalDisplayRecords=>intval$iTotal,。。。我看到它现在工作得很好。但我不明白为什么它现在能工作:为什么itotalrecords和itotaldisplayrecords必须相同?还是我错过了什么again@Mehmet你又没抓住重点。对于您当前的代码,它将工作,因为您没有使用任何过滤器。但是,如果您将在条件或数据表搜索框中使用某些筛选,您将无法再次获得预期的结果。请看,itotalrecords是数据库中各个表的总记录数,itotaldisplayrecords是筛选后获得的记录数。如果您使用搜索框,则可以。是的,我计算出来了。现在我想知道这一点;运行查询三次从表中选择计数并从表中选择计数,其中。。。对于itotalrecorads和itotaldispalyrecords。然后选择第1列、第2列。。从表中获取表内容数据。每次在表中移动页面时,每次get请求都执行此操作。因此,它似乎会导致性能问题。。实现这一点的有效方法是什么。可以选择使用sql\u calc\u found\u行。我更喜欢使用索引和运行2个查询来获得结果和计数。看到这个链接-为了性能,我想你需要优化你的查询;非常感谢。