【问题标题】:Datatables ajax reload is ignoring dynamically updated request parametersDatatables ajax 重新加载忽略动态更新的请求参数
【发布时间】:2017-11-27 12:01:39
【问题描述】:

我正在使用服务器端 jquery 数据表 1.10.16。我想通过使用更新的参数请求数据表 ajax 来重新加载数据。 要重新加载数据表,我使用以下数据表 api:

$('#user_data').DataTable().ajax.reload();

我的数据表初始化如下:

$('#user_data').DataTable({
        // to hide search filter
        "searching": false,
        "lengthMenu": [[5, 25, 50], [5, 25, 50]],
        processing: true,
        serverSide: true,
        ajax: {
            "url": '/admin/getStats',
            "data": {user_id: user_id, date_range: JSON.stringify(DATE_RANGE)},

        },
        columns: [
            {data: 'name', name: 'name'},
            {data: 'date', name: 'date'},
            {data: 'country', name: 'country'}
        ]
    });

DATE_RANGE 和 user_id 是全局变量,更新如下:

     $('#dateSelector').on('apply.daterangepicker', function(ev, picker) {
                DATE_RANGE[0] = picker.startDate.format('DD-MM-YYYY');
                DATE_RANGE[1] = picker.endDate.format('DD-MM-YYYY');
                console.log(DATE_RANGE); // here I am getting updated value properly
// reloading the datatable , but the parameters are the previous one
                $('#user_data').DataTable().ajax.reload();
            });

如何传递更新的参数?

【问题讨论】:

  • 您是否尝试在数据表设置中禁用缓存?
  • 怎么做?
  • 我在初始化数据表中添加了“cache”:false,但旧参数仍然保留。

标签: datatable datatables server-side


【解决方案1】:

在 oSettings 中禁用表缓存 [此参数根据 DT 版本而变化。请参阅您正在使用的版本的文档。] 调用后

table.ajax.reload();

立即调用:

table.ajax.clearAjaxParams();

这又随着基于版本的变化而变化。参考文档。

【讨论】:

    【解决方案2】:

    终于以某种方式解决了。将来人们可能需要:

    $(document).ready(function() {
        fetchData();
    });
    
    function fetchData() {
    $('#user_data').DataTable({
            // to hide search filter
            "searching": false,
            "lengthMenu": [[5, 25, 50], [5, 25, 50]],
            processing: true,
            serverSide: true,
            ajax: {
                "url": '/admin/getStats',
                "data": {user_id: user_id, date_range: JSON.stringify(DATE_RANGE)},
    
            },
            columns: [
                {data: 'name', name: 'name'},
                {data: 'date', name: 'date'},
                {data: 'country', name: 'country'}
            ]
        });
    }
    
    $('#dateSelector').on('apply.daterangepicker', function(ev, picker) {
    .....
    ....
    
         $('#user_data').DataTable().destroy();
         fetchData();
    });
    

    【讨论】:

      【解决方案3】:

      我想如果你只是重绘dataTable,一个新的带有更新参数的post请求将被发送到服务器。

      $('#dateSelector').on('apply.daterangepicker', function(ev, picker) {
        $('#user_data').DataTable().draw();
      }
      

      【讨论】:

        猜你喜欢
        • 2015-12-10
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 2015-05-25
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多