我正在尝试从旧的Datatables升级到新的Datatables 1.10。 问题是我使用表单来创建自定义过滤器,并且例如每次选择更改时,表都会重新加载并过滤新数据。
这是代码的一部分:
$(document).ready(function() {
var table = $('#main_table_<?=MODULO?>_<?=THIS?>').DataTable({
dom : 'T<"clearfix">lfrt<"clearfix">ip',
stateSave : true,
pageLength : 25,
pagingType : "full_numbers",
processing : true,
serverSide : true,
ajax : {
url : "<?=CAMINHO?>_lista_registos_busca.php",
data: buildSearchData
}
});
function buildSearchData(){
var obj = {
id_utilizador : $("select#id_utilizador option:selected").val(),
id_departamento : $("select#id_departamento option:selected").val(),
id_escritorio : $("select#id_escritorio option:selected").val(),
id_contrato_tipo : $("select#id_contrato_tipo option:selected").val(),
};
return obj;
}
$("select#id_utilizador, select#id_departamento, select#id_escritorio, select#id_contrato_tipo").change(function () {
table.ajax.reload();
});
ajax.reload()工作正常,数据正确发送,但没有发送任何Datatable参数。替代方法:
$(document).ready(function() {
var table = $('#main_table_<?=MODULO?>_<?=THIS?>').DataTable({
dom : 'T<"clearfix">lfrt<"clearfix">ip',
stateSave : true,
pageLength : 25,
pagingType : "full_numbers",
processing : true,
serverSide : true,
ajax : {
url : "<?=CAMINHO?>_lista_registos_busca.php",
data: {
id_utilizador : $("select#id_utilizador option:selected").val(),
id_departamento : $("select#id_departamento option:selected").val(),
id_escritorio : $("select#id_escritorio option:selected").val(),
id_contrato_tipo : $("select#id_contrato_tipo option:selected").val(),
}
}
});
像这样,所有数据都被发送,ajax.reload()重新加载表,但是选择中的数据在更改时不会更新。
你们中的任何一个人都可以帮我解决这个问题吗? 提前谢谢。
答案 0 :(得分:0)
我认为您错过了()
,因此实际上没有调用buildSeachData
函数。
$(document).ready(function() {
var table = $('#main_table_<?=MODULO?>_<?=THIS?>').DataTable({
dom : 'T<"clearfix">lfrt<"clearfix">ip',
stateSave : true,
pageLength : 25,
pagingType : "full_numbers",
processing : true,
serverSide : true,
ajax : {
url : "<?=CAMINHO?>_lista_registos_busca.php",
data: buildSearchData()
}
});
function buildSearchData(){
var obj = {
id_utilizador : $("select#id_utilizador option:selected").val(),
id_departamento : $("select#id_departamento option:selected").val(),
id_escritorio : $("select#id_escritorio option:selected").val(),
id_contrato_tipo : $("select#id_contrato_tipo option:selected").val(),
};
return obj;
}
$("select#id_utilizador, select#id_departamento, select#id_escritorio, select#id_contrato_tipo").change(function () {
table.ajax.reload();
});
答案 1 :(得分:0)
您绑定data
到ajax.data
的方式。
而不是:
ajax: {
url : "<?=CAMINHO?>_lista_registos_busca.php",
data: buildSearchData
}
试试这个:
ajax: {
url : "<?=CAMINHO?>_lista_registos_busca.php",
data: function (d) {
Object.assign(d, buildSearchData);
return d;
}
}
通过这种方式,您可以“拦截”DataTables发布参数,并合并自己的参数。
有关文件: https://datatables.net/reference/option/ajax.data
对于其他与stackoverflow相关的问题:
how to pass parameters on reload of datatables
DataTables ajax.reload() with parameters
希望它有所帮助!