我正在尝试实现一种功能,即单击屏幕上的按钮将导致我的jQuery dataTable刷新(因为自创建dataTable以来服务器端数据源可能已更改)。
这就是我所拥有的:
$(document).ready(function() {
$("#my-button").click(function() {
$("#my-datatable").dataTable().fnReloadAjax();
});
});
但是当我运行它时,它什么也没做。单击按钮时刷新dataTable的正确方法是什么?提前谢谢!
答案 0 :(得分:106)
对于DataTables的1.10.0版本,它内置且简单:
var table = $('#example').DataTable();
table.ajax.reload();
或只是
$('#example').DataTable().ajax.reload();
答案 1 :(得分: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();
});
}
function AutoReload()
{
RefreshTable('#HelpdeskOverview', '/Helpdesk/ActiveCases/noacceptancetest');
setTimeout(function(){AutoReload();}, 30000);
}
$(document).ready(function () {
InitOverviewDataTable();
setTimeout(function(){AutoReload();}, 30000);
});
答案 2 :(得分:22)
您可以使用广泛的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();
答案 3 :(得分:19)
我遇到了同样的问题,这就是我修复它的方法:
首先使用您选择的方法获取数据,我在提交将对表进行更改的结果后使用ajax。然后清除并添加新数据:
var refreshedDataFromTheServer = getDataFromServer();
var myTable = $('#tableId').DataTable();
myTable.clear().rows.add(refreshedDataFromTheServer).draw();
答案 4 :(得分:18)
首先销毁数据表,然后绘制数据表。
$('#table1').DataTable().destroy();
$('#table1').find('tbody').append("<tr><td><value1></td><td><value1></td></tr>");
$('#table1').DataTable().draw();
答案 5 :(得分:10)
var ref = $('#example').DataTable();
ref.ajax.reload();
如果您要向 DataTables 1.10添加重新加载/刷新按钮,请使用 drawCallback 。
请参阅下面的示例(我正在使用带有bootstrap css的 DataTables )
var ref= $('#hldy_tbl').DataTable({
"responsive": true,
"processing":true,
"serverSide":true,
"ajax":{
"url":"get_hotels.php",
"type":"POST"
},
"drawCallback": function( settings ) {
$('<li><a onclick="refresh_tab()" class="fa fa-refresh"></a></li>').prependTo('div.dataTables_paginate ul.pagination');
}
});
function refresh_tab(){
ref.ajax.reload();
}
答案 6 :(得分:10)
这个简单的答案对我有用
$('#my-datatable').DataTable().ajax.reload();
ref https://datatables.net/forums/discussion/38969/reload-refresh-table-after-event
答案 7 :(得分:3)
我就是这样做的......也许不是最好的方式,但它绝对更简单(恕我直言),不需要任何额外的插件。
<div id="my-datatable"></div>
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>
则无效。但是如果没有它,你可能会过得很快。我还没弄清楚是什么使得它需要什么,什么不需要。
答案 8 :(得分:3)
我建议使用以下代码。
table.ajax.reload(null, false);
这样做的原因是,用户分页不会在重新加载时重置。
示例:
<button id='refresh'> Refresh </button>
<script>
$(document).ready(function() {
table = $("#my-datatable").DataTable();
$("#refresh").on("click", function () {
table.ajax.reload(null, false);
});
});
</script>
有关此问题的详细信息,请访问Here
答案 9 :(得分:3)
首先尝试销毁数据表,然后重新设置,例如
var table;
$(document).ready(function() {
table = $("#my-datatable").datatable()
$("#my-button").click(function() {
table.fnDestroy();
table = $("#my-datatable").dataTable();
});
});
答案 10 :(得分:2)
嗯,您没有显示加载脚本的方式/位置,但是要使用插件API函数,您必须在加载DataTables库之后但在初始化DataTable之前将其包含在页面中。
像这样<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.fnReloadAjax.js"></script>
答案 11 :(得分:2)
如果您使用url属性,只需执行
table.ajax.reload()
希望它可以帮助某人
答案 12 :(得分: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 强>
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);
});
答案 13 :(得分:0)
根据DataTable帮助,我可以为我的桌子做。
我想要多个数据库到我的DataTable。
例如:data_1.json&gt; 2500条记录 - data_2.json&gt; 300条记录 - data_3.json&gt; 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' }
]
});
答案 14 :(得分:0)
如果使用数据表v1.10.12然后只需调用.draw()
方法并传递所需的绘制类型,即full-reset
,page
,那么您将使用新数据重新绘制dt
let dt = $("#my-datatable").datatable()
//做一些动作
dt.draw('full-reset')
了解更多数据表文档
答案 15 :(得分: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">×</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">×</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');
}
}
答案 16 :(得分:0)
if(data.length==0){
alert("empty");
$('#MembershipTable > tbody').empty();
// $('#MembershipTable').dataTable().fnDestroy();
$('#MembershipTable_info').empty();
$("#MembershipTable_length").empty();
$("#MembershipTable_paginate").empty();
html="<tr><td colspan='20'><b>No data available in Table</b> </td></tr>";
$("#MembershipTable").append(html);
}
else{
$('#MembershipTable').dataTable().fnDestroy();
$('#MembershipTable > tbody').empty();
for(var i=0; i<data.length; i++){
//
.......}
答案 17 :(得分:0)
var myTable = $('#tblIdName')。DataTable(); myTable.clear()。rows.add(myTable.data).draw();
这对我有用,而无需使用ajax。
答案 18 :(得分:0)
您必须在执行更新操作后编写此代码行。
$('#example').DataTable().ajax.reload();
答案 19 :(得分:0)
要刷新数据表时,请使用以下代码:
$("#my-button").click(function() {
$('#my-datatable').DataTable().clear().draw();
});
答案 20 :(得分:0)
对于我的情况(DataTables 1.10.7),以下代码对我有用;
let table = $(tableName).DataTable();
table.clear().draw();
$(tableName).dataTable({ ... });
Datatables clear(): Simply remove all rows of data from the table
答案 21 :(得分:0)
非常简单的答案
$("#table_name").DataTable().ajax.reload(null, false);
答案 22 :(得分:-1)
function autoRefresh(){
table.ajax.reload(null,false);
alert('Refresh');//for test, uncomment
}
setInterval('autoRefresh()', 5000);
答案 23 :(得分:-6)
使用init重新初始化数据表并将检索写为true ..done..so simple
例如
TableAjax.init();
retrieve: true,