【问题标题】:How can I change the data of DataTables after it has been initialized?初始化后如何更改DataTables的数据?
【发布时间】:2016-06-18 21:25:26
【问题描述】:

我想根据 ajax 请求填充 datatables

这是我所做的

   $(function(e) {

        $('#CampaignMenu').change(function(e) {

            $('#ReportWrapper').hide();


            if (  $(this).val() != '0') {
                $('#DisplayReport').attr('disabled', false);
            } else {
                $('#DisplayReport').attr('disabled', true);
            }

        });

        $('#DisplayReport').click(function (e) {

            $.ajax({
                type: 'GET',
                url: '/getdata',
                data: { 'campaign_id': $('#CampaignMenu').val() },
                dataType: 'json',
                success: function (json) {

                    $('#reportTable').DataTable({
                        data: json,
                        pageLength: 50,
                        lengthMenu: [10, 25, 50, 75, 100, 250, 500, 1000],
                        searching: false,
                        order: [   [ 2, 'desc' ]  ],
                        columns: [
                            { data: 'chain_name', title: 'Chain Name' },
                            { data: 'store_id' , title: 'Store Number' },
                            { data: 'completed', title: 'Total Surveys Completed' },
                            { data: 'initial_quota', title: 'Target Surveys To Complete' },
                            { data: 'total_callable', title: 'Total Call In The Dialer Queue' },
                            { data: 'current_status', title: 'Current Quota Status' },
                        ]
                    });

                    $('#ReportWrapper').show();

                }
            });

        });

    });

</script>

第一个请求没有问题。但是,当我第二次调用 ajax 请求时,我得到了这个错误

DataTables warning: table id=reportTable - Cannot reinitialise DataTable. For more information about this error, please see http://datatables.net/tn/3

初始化后如何更改表格内容?

我想在页面加载时初始化数据表,然后在我的 Ajax 请求中调用一些事件来填充它。但是,我需要一个事件来从我的 ajax 请求中调用。

    $(window).load(function (e) {

        $('#reportTable').DataTable({
            pageLength: 50,
            lengthMenu: [10, 25, 50, 75, 100, 250, 500, 1000],
            searching: false,
            order: [   [ 2, 'desc' ]  ],
            columns: [
                { data: 'chain_name', title: 'Chain Name' },
                { data: 'store_id' , title: 'Store Number' },
                { data: 'completed', title: 'Total Surveys Completed' },
                { data: 'initial_quota', title: 'Target Surveys To Complete' },
                { data: 'total_callable', title: 'Total Call In The Dialer Queue' },
                { data: 'current_status', title: 'Current Quota Status' }
             ]
        });
    });

我试图在重新初始化之前销毁表,但这不起作用。

$('#reportTable').DataTable().destroy();

更新

我找到了一种在初始化表后将数据添加到表中的方法。但是我需要一种方法来首先清除数据,这样我就不会有重复的数据。

这是我为添加数据所做的工作

           var table = $('#reportTable').dataTable();

                table.fnAddData(json);

之前的代码一直在向表中追加数据,但它并没有首先清除现有数据,从而导致重复。我尝试在添加以下代码之前添加 [table.clear().draw()][2] 但这给了我一个错误

TypeError: table.clear 不是函数

我怎样才能正确地让 DataTable 随时更改其内容?

【问题讨论】:

    标签: javascript jquery ajax datatable datatables


    【解决方案1】:

    要使用 table.clear(),请使用 DataTable() 而不是 dataTable()

    dataTable 返回一个 jquery 对象,而 DataTable 返回数据表对象

    我也遇到过这个问题,我处理它的方式只是破坏一切并重新创建它,但性能对于这项任务并不是超级关键。

    【讨论】:

      【解决方案2】:

      DataTables 提供了一个使用destroy:true 的选项,它会破坏之前的数据并重新初始化!我也在使用 WordPress,它运行良好。如果有人遇到这样的问题,您可以简单地尝试这个解决方案。希望这会有所帮助,干杯!

      $('#DisplayReport').click(function (e) {
      
                  $.ajax({
                      type: 'GET',
                      url: '/getdata',
                      data: { 'campaign_id': $('#CampaignMenu').val() },
                      dataType: 'json',
                      success: function (json) {
      
                          $('#reportTable').DataTable({
                              destroy: true,   <======= Add this to remove previous table
                              data: json,
                              pageLength: 50,
                              lengthMenu: [10, 25, 50, 75, 100, 250, 500, 1000],
                              searching: false,
                              order: [   [ 2, 'desc' ]  ],
                              columns: [
                                  { data: 'chain_name', title: 'Chain Name' },
                                  { data: 'store_id' , title: 'Store Number' },
                                  { data: 'completed', title: 'Total Surveys Completed' },
                                  { data: 'initial_quota', title: 'Target Surveys To Complete' },
                                  { data: 'total_callable', title: 'Total Call In The Dialer Queue' },
                                  { data: 'current_status', title: 'Current Quota Status' },
                              ]
                          });
                          $('#ReportWrapper').show();
                      }
                  });
              });
          });
      

      【讨论】:

      • 这是 1.10 版还是 1.9 版?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多