如何重新加载/刷新jQuery dataTable?

117

我正在尝试实现这样的功能:点击屏幕上的按钮会导致我的jQuery dataTable刷新(因为自创建dataTable以来,服务器端数据源可能已经发生了更改)。

以下是我的代码:

$(document).ready(function() {
    $("#my-button").click(function() {
        $("#my-datatable").dataTable().fnReloadAjax();
    });
});

但是当我运行它时,什么也没有发生。在单击按钮时刷新dataTable的正确方法是什么?


你是否遇到了任何Javascript错误?请使用Firebug / Chrome Inspector进行检查,或者可能需要添加一些更多的代码(例如表格和按钮代码)。 - Geert
3
ajax.reload() 是一个 DataTables 插件的 API 方法,用于重新加载表格数据并更新页面显示。 - zx1986
我的解决方案是:没有使用Ajax: https://dev59.com/QF8e5IYBdhLWcg3wPYlA#72723432 - Matheus Santz
26个回答

3
如果您使用url属性,请执行以下操作:
table.ajax.reload()

3
这是我的做法...也许不是最好的方法,但它绝对更简单(在我看来),而且不需要任何额外的插件。

HTML

<div id="my-datatable"></div>

jQuery

function LoadData() {
    var myDataTable = $("#my-datatable").html("<table><thead></thead><tbody></tbody></table>");
    $("table",myDataTable).dataTable({...});
}
$(document).ready(function() {
    $("#my-button").click(LoadData);
    LoadData();
});

注意:在我使用jQuery dataTable时,有时如果你没有使用 <thead></thead><tbody></tbody>,它就不能正常工作。但是你也许可以不使用它而得以工作。我还没有完全弄清楚什么情况下它是必需的,什么情况下不是。

2

好的,你没有展示你是如何/在哪里加载脚本的,但是要使用插件API函数,你必须在加载DataTables库之后但在初始化DataTable之前将其包含在页面中。

像这样:

<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.fnReloadAjax.js"></script>

2
var myTable = $('#tblIdName').DataTable();
    myTable.clear().rows.add(myTable.data).draw();

这对我很有帮助,而且没有使用ajax。"最初的回答"

1

在执行更新操作后,您需要编写这行代码。

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

1
Allan Jardine的DataTables是一个非常强大和流畅的jQuery插件,用于显示表格数据。它具有许多功能,并且可以完成大部分您可能需要的操作。然而,有一件事情比较麻烦,那就是如何以简单的方式刷新内容。因此,为了方便自己和其他人,这里提供了一种完整的示例方法: HTML
<table id="HelpdeskOverview">
  <thead>
    <tr>
      <th>Ärende</th>
      <th>Rapporterad</th>
      <th>Syst/Utr/Appl</th>
      <th>Prio</th>
      <th>Rubrik</th>
      <th>Status</th>
      <th>Ägare</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

JavaScript (JavaScript)
function InitOverviewDataTable()
{
  oOverviewTable =$('#HelpdeskOverview').dataTable(
  {
    "bPaginate": true,
    "bJQueryUI": true,  // ThemeRoller-stöd
    "bLengthChange": false,
    "bFilter": false,
    "bSort": false,
    "bInfo": true,
    "bAutoWidth": true,
    "bProcessing": true,
    "iDisplayLength": 10,
    "sAjaxSource": '/Helpdesk/ActiveCases/noacceptancetest'
  });
}

function RefreshTable(tableId, urlData)
{
  $.getJSON(urlData, null, function( json )
  {
    table = $(tableId).dataTable();
    oSettings = table.fnSettings();
    
    table.fnClearTable(this);

    for (var i=0; i<json.aaData.length; i++)
    {
      table.oApi._fnAddData(oSettings, json.aaData[i]);
    }

    oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
    table.fnDraw();
  });
}

function AutoReload()
{
  RefreshTable('#HelpdeskOverview', '/Helpdesk/ActiveCases/noacceptancetest');
 
  setTimeout(function(){AutoReload();}, 30000);
}

$(document).ready(function () {
  InitOverviewDataTable();
  setTimeout(function(){AutoReload();}, 30000);
});

源代码


1

非常简单的答案

$("#table_name").DataTable().ajax.reload(null, false); 

0

根据DataTable的帮助文档,我可以为我的表完成。

我想要在我的DataTable中添加多个数据库。

例如:data_1.json > 2500 条记录 - data_2.json > 300 条记录 - data_3.json > 10265 条记录

var table;
var isTableCreated= false;

if (isTableCreated==true) {
    table.destroy();
    $('#Table').empty(); // empty in case the columns change
}
else
    i++;

table = $('#Table').DataTable({
        "processing": true,
        "serverSide": true,
        "ordering": false,
        "searching": false,
        "ajax": {
            "url": 'url',
            "type": "POST",
            "draw": 1,
            "data": function (data) {
                data.pageNumber = (data.start / data.length);
            },
            "dataFilter": function (data) {
                return JSON.stringify(data);
            },
            "dataSrc": function (data) {
                if (data.length > 0) {
                    data.recordsTotal = data[0].result_count;
                    data.recordsFiltered = data[0].result_count;
                    return data;
                }
                else
                    return "";
            },

            "error": function (xhr, error, thrown) {
                alert(thrown.message)
            }
        },
        columns: [
           { data: 'column_1' },
           { data: 'column_2' },
           { data: 'column_3' },
           { data: 'column_4' },
           { data: 'column_5' }
        ]
    });

0

我的表格首次调用:

var myTable = $('.myTable').DataTable({
    "language": {
        "url": "//cdn.datatables.net/plug-ins/1.11.0/i18n/es_es.json"
    },
    dom: 'Bfrtip',
    processing: true,
    "paging": false
});

在这里放入你的ajax调用代码。

然后在ajax结果之后:

//Destroy my table
myTable.destroy();

//Place my table again
$("#tableWrapper").html(''+
    '<table class="table-striped myTable">'+
        '<thead>'+
            '<tr>'+
                '<th>Title</th>'+
            '</tr>'+
        '</thead>'+
        '<tbody id="info_conds">'+
            '<td>Content</td>'+
        '</tbody>'+
    '</table>'+
'');

再次调用我的表属性

myTable = $('.myTable').DataTable({
    "language": {
        "url": "//cdn.datatables.net/plug-ins/1.11.0/i18n/es_es.json"
    },
    dom: 'Bfrtip',
    processing: true,
    "paging": false
});

完成。


0

我曾经做过与此相关的事情... 下面是一个包含你需要内容的JavaScript示例。 这里有一个演示:http://codersfolder.com/2016/07/crud-with-php-mysqli-bootstrap-datatables-jquery-plugin/

//global the manage member table 
var manageMemberTable;

function updateMember(id = null) {
    if(id) {
        // click on update button
        $("#updatebutton").unbind('click').bind('click', function() {
            $.ajax({
                url: 'webdesign_action/update.php',
                type: 'post',
                data: {member_id : id},
                dataType: 'json',
                success:function(response) {
                    if(response.success == true) {                      
                        $(".removeMessages").html('<div class="alert alert-success alert-dismissible" role="alert">'+
                              '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>'+
                              '<strong> <span class="glyphicon glyphicon-ok-sign"></span> </strong>'+response.messages+
                            '</div>');

                        // refresh the table

                        manageMemberTable.ajax.reload();

                        // close the modal
                        $("#updateModal").modal('hide');

                    } else {
                        $(".removeMessages").html('<div class="alert alert-warning alert-dismissible" role="alert">'+
                              '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>'+
                              '<strong> <span class="glyphicon glyphicon-exclamation-sign"></span> </strong>'+response.messages+
                            '</div>');

                        // refresh the table                        
                        manageMemberTable.ajax.reload();

                        // close the modal
                        $("#updateModal").modal('hide');
                    }
                }
            });
        }); // click remove btn
    } else {
        alert('Error: Refresh the page again');
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接