带有新数据的Datatables 1.10和ajax.reload()

时间:2014-11-28 16:55:04

标签: jquery datatables

我正在尝试从旧的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()重新加载表,但是选择中的数据在更改时不会更新。

你们中的任何一个人都可以帮我解决这个问题吗? 提前谢谢。

2 个答案:

答案 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)

您绑定dataajax.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

希望它有所帮助!