我有一个SQL表,其36000个条目显示在Datatables列表中。 自从我这样开发以来,分页效果很好:
var table = $('.datatable').DataTable({
pageLength : 20,
lengthChange : false,
processing : true,
serverSide : true,
ajax : {
url :"ajax.php",
type: "post",
}
});
在我的文件ajax.php中,我只是根据页码设置的限制回显我的行(JSON编码)。
问题是原生过滤和搜索不再有效。 当我想过滤一列时,会出现“处理”图层,然后消失,但我的数据仍然相同。 当我想通过表格进行研究时,没有任何反应。
所以,这是我的问题:
提前感谢
编辑: 感谢Abdul Rehman Sayed,我设法做了搜索部分。 这就是我所做的:
var table = $('.datatable').DataTable({
pageLength : 20,
lengthChange : false,
processing : true,
serverSide : true,
ajax : {
data : function(d) {
d.searching = get_search($('.datatable'));
},
url :"ajax.php",
type: "post",
},
searching : false,
});
$('.datatable thead th').each(function() {
var title = $(this).data('name');
$('.datatable').find('tfoot tr').append('<td><input type="text" name="'+title+'"/></td>');
});
table.columns().every(function() {
var that = this;
$('input', this.footer()).on('keyup', function(e) {
that.search(this.value).draw();
}
});
function get_search(datatable) {
var result = [];
datatable.find('tfoot').find('input').each(function() {
result.push([$(this).attr('name'), $(this).val()]);
});
return result;
}
对于过滤,我开发了一个丑陋的代码:
$('.datatable').find('th').click(function() {
var item = $(this);
removeClasses($('.datatable'), item.index());
if(item.hasClass('sorting_asc')) {
item.removeClass('selected_asc').addClass('selected_desc');
} else {
item.removeClass('selected_desc').addClass('selected_asc');
}
});
function get_sorting(datatable) {
var result = false;
datatable.find('th').each(function() {
var item = $(this);
var name = item.data('name');
if(item.hasClass('selected_asc')) {
result = name+' ASC';
} else if(item.hasClass('selected_desc')) {
result = name+' DESC';
} else {
// continue
}
});
return result;
}
function removeClasses(datatable, index) {
datatable.find('th').each(function() {
if($(this).index() !== index) {
$(this).removeClass().addClass('sorting');
}
});
}
答案 0 :(得分:9)
你将不得不做所有的搜索和在服务器端过滤。
对于搜索/过滤器或页面的每个请求,数据表将所有这些作为表单数据传递到服务器页面。 请参阅https://www.datatables.net/manual/server-side
您必须使用此表单数据来过滤/搜索/分页sql table&amp;上的记录。相应地传递给客户。
数据表仅显示从服务器获取的内容。
答案 1 :(得分:0)
只需在 URL 本身中传递参数
var table = $('.datatable').DataTable({
pageLength : 20,
lengthChange : false,
processing : true,
serverSide : true,
ajax : {
url :`ajax.php?param_name=${$("#filter").val()}`
}
});
此代码有效