Как перезагрузить/обновить jQuery dataTable?
Я пытаюсь реализовать функциональность, при которой нажатие кнопки на экране приведет к обновлению jQuery dataTable (в качестве источника данных на стороне сервера может измениться с момента создания dataTable).
Вот что у меня есть:
$(document).ready(function() {
$("#my-button").click(function() {
$("#my-datatable").dataTable().fnReloadAjax();
});
});
Но когда я запускаю это, он ничего не делает. Каков правильный способ обновления данныхTable при нажатии кнопки? Спасибо заранее!
Ответы
Ответ 1
Вы можете попробовать следующее:
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);
});
http://www.meadow.se/wordpress/?p=536
Ответ 2
С версией 1.10.0 из DataTables она встроена и проста:
var table = $('#example').DataTable();
table.ajax.reload();
или просто
$('#example').DataTable().ajax.reload();
http://datatables.net/reference/api/ajax.reload()
Ответ 3
Вы можете использовать обширный API DataTable, чтобы перезагрузить его ajax.reload()
Если вы объявляете свой datatable как DataTable()
(новая версия), вам нужно:
var oTable = $('#filtertable_data').DataTable( );
// to reload
oTable.ajax.reload();
Если вы объявляете свой datatable как DataTable()
(старая версия), вам нужно:
var oTable = $('#filtertable_data').dataTable( );
// to reload
oTable.api().ajax.reload();
Ответ 4
Сначала уничтожьте набор данных, а затем нарисуйте его.
$('#table1').DataTable().destroy();
$('#table1').find('tbody').append("<tr><td><value1></td><td><value1></td></tr>");
$('#table1').DataTable().draw();
Ответ 5
У меня была та же проблема, вот как я ее исправил:
сначала получите данные по выбранному вами методу, я использую ajax после отправки результатов, которые внесут изменения в таблицу. Затем очистите и добавьте свежие данные:
var refreshedDataFromTheServer = getDataFromServer();
var myTable = $('#tableId').DataTable();
myTable.clear().rows.add(refreshedDataFromTheServer).draw();
вот источник:
https://datatables.net/reference/api/clear()
Ответ 6
Этот простой ответ сработал у меня
$('#my-datatable').DataTable().ajax.reload();
ref https://datatables.net/forums/discussion/38969/reload-refresh-table-after-event
Ответ 7
var ref = $('#example').DataTable();
ref.ajax.reload();
Если вы хотите добавить кнопку перезагрузить/обновить в DataTables 1.10, используйте drawCallback.
См. пример ниже (я использую DataTables с bootstrap css)
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();
}
Ответ 8
Вот как я это делаю... Возможно, это не лучший способ, но он определенно проще (IMHO) и не требует никаких дополнительных плагинов.
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>
, это не работает. Но вы можете обойтись без него. Я точно не понял, что из этого требуется, а что нет.
Ответ 9
Попробуйте сначала уничтожить данные, затем настройте его снова, например
var table;
$(document).ready(function() {
table = $("#my-datatable").datatable()
$("#my-button").click(function() {
table.fnDestroy();
table = $("#my-datatable").dataTable();
});
});
Ответ 10
Я бы порекомендовал использовать следующий код.
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>
Подробности об этом можно найти здесь
Ответ 11
ну, вы не указали, как/где вы загружаете скрипты, но для использования функций API подключаемого модуля вы должны включить его на свою страницу после загрузки библиотеки DataTables, но перед инициализацией DataTable.
как это
<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.fnReloadAjax.js"></script>
Ответ 12
Если вы используете атрибут url, просто сделайте
table.ajax.reload()
Надеюсь, что это поможет кому-то
Ответ 13
Allan Jardines 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);
});
Источник
Ответ 14
var myTable = $ ('# tblIdName'). DataTable();. MyTable.clear() rows.add(myTable.data).draw();
Это работало для меня без использования ajax.
Ответ 15
Используйте этот код, когда вы хотите обновить данные:
$("#my-button").click(function() {
$('#my-datatable').DataTable().clear().draw();
});
Ответ 16
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
В соответствии с 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' }
]
});
Ответ 18
если использовать datatable v1.10.12, а затем просто вызывая метод .draw()
и передавая требуемые типы ничьей, т.е. full-reset
, page
, то вы повторно рисуете свой dt с новыми данными
let dt = $("#my-datatable").datatable()
//сделаем какое-то действие
dt.draw('full-reset')
для дополнительной проверки datatable docs
Ответ 19
Я сделал кое-что, что связано с этим... Ниже приведен пример 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');
}
}
Ответ 20
Вы должны написать эту строку кода после выполнения операции обновления.
$('#example').DataTable().ajax.reload();
Ответ 21
function autoRefresh(){
table.ajax.reload(null,false);
alert('Refresh');//for test, uncomment
}
setInterval('autoRefresh()', 5000);
Ответ 22
reinitialise datatable с init и write retrieve как true..done..so simple
например.
TableAjax.init();
retrieve: true,