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