为什么我在 jQuery DataTables 中没有必要的分页按钮?

问题描述

我在使用带有服务器端请求的分页的数据表上遇到问题。

看起来分页按钮的数量与我的结果无关。 无论我有多少结果,我总是有第 1、2、3、4、5 页的按钮。

我的数据表定义:

$('#tableau_reponses').DataTable({
        "ajax": {
            url: '/my_api/get_reponses_ajax',type: 'post',data: formData
        },"paging": true,"searching": false,"bProcessing": true,"serverSide": true,"ordering": false,"info": false,"pagingType": "numbers","pageLength": 20,"lengthMenu": [10,20,50,100],'order': [[1,'asc']],'columnDefs': [
            {
                'targets': 0,'orderable': false,'className': 'dt-body-center','render': function (data,type,full,Meta){
                    return '<input type="checkBox" name="id[]" value="' + $('<div/>').text(data).html() + '">';
                }
            },{
                'targets': 1,'render': function (data) {
                    return '<td class="response_state_folder"></td>';
                }
            }
        ],});

在我的测试环境中,我知道我有 29 个结果。我的 pageLength 设置为 20。 所以认情况下,在第 1 页上,我有 20 个结果。当我选择第 2 页时,我有 9 个结果。到现在为止还挺好。 但是当我选择第 3、4 或 5 页(我不应该这样做)时,我有 0 个结果。

为什么我有“3、4、5”按钮,而有 29 个结果,而我应该只有 2 页? 当然,如果我有 142 个结果,我需要 8 页...

我想我在这里遗漏了一些很明显的东西......

感谢您的帮助!

====== 编辑 ======

@Ashu's answer 之后,我设法在响应中获得了“recordsFiltered”和“recordsTotal”(在我的示例中分别为“20”和“29”)。但是现在,我只有一个按钮(用于第 1 页),而我希望有两个按钮。

解决方法

您的服务器响应必须返回来自数据库的过滤响应中有多少 rows,以及总共有多少行,以便数据库可以正确设置分页值。

示例响应:

{
    "draw": 1,"recordsTotal": 57,// these both are important and must be updated in every response 
    "recordsFiltered": 20,// 
    "data": [
        [
            "Angelica","Ramos","System Architect","London","9th Oct 09","$2,875"
        ],]
}

如果您需要有关服务器端代码的帮助,您可以编辑或提出新问题。

文档中的更多信息 here