DataTables寻呼机在只有一个页面时显示多个页面

DataTables寻呼机在只有一个页面时显示多个页面,datatables,datatables-1.10,Datatables,Datatables 1.10,这是一个奇怪的。 我将datatables v1.10.19与jQuery 3.3.1和Bootstrap 3.3.7一起使用 我的datatables网格配置为显示1000条记录(但您可以将其更改为2500条、5000条和“全部”)。 我的数据库里只有大约60条记录 它使用服务器端处理来检索数据 当网格加载时,寻呼机显示5个按钮加上一个椭圆(好像还有更多) 更奇怪的是,如果我将下拉列表改为显示“所有”记录,它的行为与我预期的一样,即寻呼机有一个页面按钮 有效载荷基本相同: { "dat

这是一个奇怪的。 我将datatables v1.10.19与jQuery 3.3.1和Bootstrap 3.3.7一起使用

我的datatables网格配置为显示1000条记录(但您可以将其更改为2500条、5000条和“全部”)。 我的数据库里只有大约60条记录

它使用服务器端处理来检索数据

当网格加载时,寻呼机显示5个按钮加上一个椭圆(好像还有更多)

更奇怪的是,如果我将下拉列表改为显示“所有”记录,它的行为与我预期的一样,即寻呼机有一个页面按钮

有效载荷基本相同:

{
    "data": {
        "draw": 8,
        "recordsTotal": 86,
        "recordsFiltered": 66,
        "data": [rows of data here]
    },
    "outcome": {
        "opResult": "Success",
        "message": ""
    }
}
当您单击第2页时,它确实成功地检索到一个包含0行的有效负载。 但寻呼机上不应该有第2页

datatable的配置对象如下所示:

    eventsSvr.buildConfig = function (url) {
        return {
            "processing": true,
            "serverSide": true,
            //"paging": true,
            "ajax": {
                url: url,
                type: ajax.requestPOST,
                dataSrc: 'data.data' // the path in the JSON structure to the array which will be the rows.
            },
            "order": [[1, "asc"]],
            "lengthMenu": [[1000, 2500, 5000, -1], [1000, 2500, 5000, "All"]],
            "initComplete": function (settings, json) {
                eventsSvr.searchTextSpan.text('Search').removeClass('search-is-on');
            },
            "columns": eventsSvr.grid.columns,
            "columnDefs": eventsSvr.grid.columnDefs,
            dom: 'ltp'
        };
$.fn.dataTable.ext.search.push(
    function (settings, data, dataIndex) {
        var picker3 = $(eventsSvr.datePickerInputs[0]).data(icapp.kendoKey);
        var picker4 = $(eventsSvr.datePickerInputs[1]).data(icapp.kendoKey);
        var rowStartDate = moment(data[3], icapp.date.momentParseFormat).toDate();
        var rowEndDate = moment(data[4], icapp.date.momentParseFormat).toDate();

        ... etc.
    }
);
我在页面上有很多自定义搜索,所以我不得不编写很多这样的代码:

    eventsSvr.buildConfig = function (url) {
        return {
            "processing": true,
            "serverSide": true,
            //"paging": true,
            "ajax": {
                url: url,
                type: ajax.requestPOST,
                dataSrc: 'data.data' // the path in the JSON structure to the array which will be the rows.
            },
            "order": [[1, "asc"]],
            "lengthMenu": [[1000, 2500, 5000, -1], [1000, 2500, 5000, "All"]],
            "initComplete": function (settings, json) {
                eventsSvr.searchTextSpan.text('Search').removeClass('search-is-on');
            },
            "columns": eventsSvr.grid.columns,
            "columnDefs": eventsSvr.grid.columnDefs,
            dom: 'ltp'
        };
$.fn.dataTable.ext.search.push(
    function (settings, data, dataIndex) {
        var picker3 = $(eventsSvr.datePickerInputs[0]).data(icapp.kendoKey);
        var picker4 = $(eventsSvr.datePickerInputs[1]).data(icapp.kendoKey);
        var rowStartDate = moment(data[3], icapp.date.momentParseFormat).toDate();
        var rowEndDate = moment(data[4], icapp.date.momentParseFormat).toDate();

        ... etc.
    }
);
但奇怪的是,“所有”记录与1000条记录的行为不同。
如上所述,选择“所有”记录都有效(只产生一个页面按钮),但其他分页大小都无效(即1000、2500、5000)。1页的数据确实返回,但我得到了5个页面按钮和一个省略号


你知道为什么会这样吗

当使用服务器端处理模式时,DataTables期望
draw
recordsTotal
recordsFiltered
为根级元素。考虑将RePysSe更改为以下内容,您可以删除<代码> DATSRC/选项>

{
    "draw": 8,
    "recordsTotal": 86,
    "recordsFiltered": 66,
    "data": [rows of data here],
    "outcome": {
        "opResult": "Success",
        "message": ""
    }
}

或者,您可以在将响应传递给数据表之前,使用作为
dataSrc
选项值提供的函数对其进行操作,但我建议按照预期的格式保存响应,以获得更可读的代码。

使用服务器端处理模式时,数据表预期
绘制
recordsTotal
recordsFiltered
为根级元素。考虑将RePysSe更改为以下内容,您可以删除<代码> DATSRC/选项>

{
    "draw": 8,
    "recordsTotal": 86,
    "recordsFiltered": 66,
    "data": [rows of data here],
    "outcome": {
        "opResult": "Success",
        "message": ""
    }
}

或者,您可以在将响应传递到数据表之前,使用作为
dataSrc
选项的值提供的函数对其进行操作,但我建议按照预期的格式保存响应,以获得更可读的代码。

OK Cool。谢谢我今天会试试,让你知道它是怎么回事。这就解决了它。谢谢可怜。如果
dataSrc
属性能够处理这个问题,那就太酷了。现在,我必须在我的服务器端框架中做一个特殊的例外,而不是像所有其他API响应一样,将响应包装在
ApiResponse
对象中。我可以接受。数据表是值得的!干杯。@onefootswill,你可以用我在第二段中写的
dataSrc
来解决它。让我知道你是否愿意保持原样,我会更新我的答案。是的,很酷。这很公平。再次感谢你为我解决了这个问题。我只是想回到这张票,用我实际上没有得到这个工作的信息来更新。我不知道为什么,但是当我过滤并返回一些小于页面大小的行时,寻呼机按钮就与网格的其余部分不同步了。仍然可以看到数字高达49的按钮(省略号后)。好的,很酷。谢谢我今天会试试,让你知道它是怎么回事。这就解决了它。谢谢可怜。如果
dataSrc
属性能够处理这个问题,那就太酷了。现在,我必须在我的服务器端框架中做一个特殊的例外,而不是像所有其他API响应一样,将响应包装在
ApiResponse
对象中。我可以接受。数据表是值得的!干杯。@onefootswill,你可以用我在第二段中写的
dataSrc
来解决它。让我知道你是否愿意保持原样,我会更新我的答案。是的,很酷。这很公平。再次感谢你为我解决了这个问题。我只是想回到这张票,用我实际上没有得到这个工作的信息来更新。我不知道为什么,但是当我过滤并返回一些小于页面大小的行时,寻呼机按钮就与网格的其余部分不同步了。仍然可以看到最多49个按钮(省略号后)。