如何重新加载/刷新 jQuery 数据表?

IT技术 javascript jquery datatables
2021-01-28 06:23:28

我正在尝试实现功能,即单击屏幕上的按钮将导致我的jQuery 数据表刷新(因为自创建数据表以来服务器端数据源可能已更改)。

这是我所拥有的:

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

但是当我运行它时,它什么也不做。单击按钮时刷新数据表的正确方法是什么?提前致谢!

6个回答

使用 DataTables 1.10.0 版,它是内置的且简单:

var table = $('#example').DataTable();
table.ajax.reload();

要不就

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

http://datatables.net/reference/api/ajax.reload()

这除了给我错误什么都不做 Cannot set property 'data' of null
2021-03-21 06:23:28
Jon Koeter:没有看到你的代码就不可能回答你的问题。请作为新问题与您的代码一起发布,以允许重现问题。
2021-03-30 06:23:28
小心使用$('#example').DataTable()而不是$('#example').dataTable()
2021-04-03 06:23:28
保留分页信息使用。table.ajax.reload(null,false),如官方文档中提到的datatables.net/reference/api/ajax.reload()
2021-04-05 06:23:28
执行此操作后,我无法访问数据表的内容。然后它说我只有 2 个 TR(一个带有标题,一个只有 1 个单元格显示没有数据)。我必须先重新绘制它吗?
2021-04-10 06:23:28

先销毁数据表,再绘制数据表。

$('#table1').DataTable().destroy();
$('#table1').find('tbody').append("<tr><td><value1></td><td><value1></td></tr>");
$('#table1').DataTable().draw();
为什么事情这么复杂?
2021-03-17 06:23:28
谢谢。这是这里唯一真正有效的答案。
2021-04-09 06:23:28

您可以尝试以下操作:

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();
    });
}
// Edited by Prasad
function AutoReload() {
    RefreshTable('#HelpdeskOverview', '/Helpdesk/ActiveCases/noacceptancetest');

    setTimeout(function() {
        AutoReload();
    }, 30000);
}

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

http://www.meadow.se/wordpress/?p=536

这很棒!但我发现你正在调用_fnAddData,它应该只是一个私有函数。这有风险吗?假设将来可能会更改函数签名。
2021-03-15 06:23:28

您可以使用 DataTable 的广泛 API 来重新加载它 ajax.reload()

如果您将数据表声明为DataTable()(新版本),则需要:

var oTable = $('#filtertable_data').DataTable( );
// to reload
oTable.ajax.reload();

如果您将数据表声明为dataTable()(旧版本),则需要:

var oTable = $('#filtertable_data').dataTable( );
// to reload
oTable.api().ajax.reload();

我遇到了同样的问题,这是我修复它的方法:

首先使用您选择的方法获取数据,我在提交将对表格进行更改的结果后使用 ajax。然后清除并添加新数据:

var refreshedDataFromTheServer = getDataFromServer();

var myTable = $('#tableId').DataTable();
myTable.clear().rows.add(refreshedDataFromTheServer).draw();

这是来源:https : //datatables.net/reference/api/clear()

最后一个非ajax答案!
2021-03-21 06:23:28
那是 fnServerData:getDataFromServer 吗?
2021-03-30 06:23:28
使用简单的 JS 对象作为数据对我有用的唯一答案。谢谢!
2021-04-08 06:23:28