您可以直接转到更新2
我有一张很大的桌子,所以提取偏移量,限制不会起作用,因为它需要很长时间。因此,我想转到键搜索分页方法,这样每次单击我的查询都会有所不同,如下所述:
/*First*/
select top (1000) id, name from table_name order by id desc;
/*returns data from 56679923-56678924*/
/*Next*/
select top (1000) id,name from table_name where id < @previous_lowest_id order by id desc;
/*returns data from 56678923-56677924*/
/*Previous*/
SELECT * FROM
(select top (1000) id,name
from table_name
where id > @previous_highest_id
order by id asc
) as myAlias
ORDER BY id desc;
/*returns data from 56679923-56678924*/
/*Last*/
SELECT * FROM
(select top (1000) id,name
from table_name
order by id asc
) as myAlias
ORDER BY id desc;
所以,我需要根据单击的按钮运行不同的查询。因此,提出了检测不同点击率的必要性。如果有什么内置的方法,那就太好了。否则,任何其他黑客处理这种情况也受到欢迎。
此外,我可以在每个LI上看到不同的ID,比如
<li class="paginate_button page-item next" id="DataTable_next">
<a href="#" aria-controls="coloradoDataTable" data-dt-idx="2" tabindex="0" class="page-link">Next</a>
</li>
所以,我也试过做以下的工作,但没有成功
$('#DataTable_last>a').click(function() { alert('zz'); });
我怎样才能摆脱这个问题呢?我正在使用可以从中引用的服务器端数据表
https://datatables.net/
更新:
现在,我可以检测到单击,但是我无法将此新数据发送到服务器。万一,如果我设置
var page = 'first';
. 此发送页面为“每个请求的第一个”。
var page;
var dataTable = $('#DataTable').DataTable( {
drawCallback: function(){
$('.paginate_button.first:not(.disabled)', this.api().table().container())
.on('click', function(){
page = 'first';
console.log(page);
});
$('.paginate_button.previous:not(.disabled)', this.api().table().container())
.on('click', function(){
page = 'previous';
console.log(page);
});
$('.paginate_button.next:not(.disabled)', this.api().table().container())
.on('click', function(){
page = 'next';
console.log(page);
});
$('.paginate_button.last:not(.disabled)', this.api().table().container())
.on('click', function(){
page = 'last';
console.log(page);
});
},
"ajax": {
"url":base_path +'/other_path',
"dataType":"json",
"type":"POST",
"data":{"_token":csrf_token,"page":page}
}
......
});
这些
console.log
单击每个按钮后显示正确的页面,但此时该值不与其他参数一起发送。
更新:2
目前,我的代码如下所示。它正在发送过去的页面状态。这意味着如果我第一次点击
next
它不会发送页面,但如果我现在单击
previous
,那么这次它将以
下一个
而不是页面
以前的
.
这看起来像是先发送Ajax请求,然后更新页面值。现在,我只需要解决这个问题,这意味着在发送Ajax之前需要首先更新页面值。
var page;
var dataTable = $('#masterDataTable').on('preXhr.dt', function (e, settings, data) {
data.page = page;
}).DataTable( {
drawCallback: function(){
$('.paginate_button.first:not(.disabled)', this.api().table().container())
.on('click', function(){
page = 'first';
console.log(page);
});
$('.paginate_button.previous:not(.disabled)', this.api().table().container())
.on('click', function(){
page = 'previous';
console.log(page);
});
$('.paginate_button.next:not(.disabled)', this.api().table().container())
.on('click', function(){
page = 'next';
console.log(page);
});
$('.paginate_button.last:not(.disabled)', this.api().table().container())
.on('click', function(){
page = 'last';
console.log(page);
});
},
"processing": true,
"serverSide": true,
"searching": false,
"ajax": {
"url":base_path +'/other_path',
"dataType":"json",
"type":"POST",
"data":{"_token":csrf_token,"page":page}
},
"columns":[
{"data":"name"},
{"data":"address"},
{"data":"city"},
{"data":"action","searchable":false,"orderable":false}
],
"aLengthMenu": [50, 100, 250, 500],
"pageLength": 50,
"ordering": false,
"pagingType": "full"
} );