Datatable jquery数据表除第一页外未分页

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

我有一个带有服务器端处理的数据表。 数据来自预期的表,但不按datatable分页。我在调试中看到数据库aaData的总记录计数14,它将显示为5, 所以我预计会有3页。。但只显示了1页和5行

这是我的表格html:

<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个查询来获得结果和计数。看到这个链接-为了性能,我想你需要优化你的查询;非常感谢。