Я пытаюсь реализовать функциональность, при которой нажатие кнопки на экране приведет к обновлению моей таблицы данных jQuery (поскольку источник данных на стороне сервера мог измениться с момента создания таблицы данных).
Вот что у меня есть:
$(document).ready(function() {
$("#my-button").click(function() {
$("#my-datatable").dataTable().fnReloadAjax();
});
});
Но когда я запускаю это, он ничего не делает. Как правильно обновлять dataTable при нажатии кнопки? Заранее спасибо!
javascript
jquery
datatables
IAmYourFaja
источник
источник
Ответы:
Вы можете попробовать следующее:
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
только частную функцию. Это рискованно? Допустим, в будущем подпись функции может быть изменена.В версии 1.10.0 DataTables это легко и просто:
var table = $('#example').DataTable(); table.ajax.reload();
или просто
$('#example').DataTable().ajax.reload();
http://datatables.net/reference/api/ajax.reload ()
источник
$('#example').DataTable()
а не$('#example').dataTable()
.cannot reinitialise datatable jquery
. Это происходит потому, чтоtable
инициализируется снова и снова для каждой записи таблицы. Чтобы избежать этого, убедитесь, что вы инициализировалиtable
только один раз.Вы можете использовать обширный 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();
источник
Сначала уничтожьте datatable, а затем нарисуйте datatable.
$('#table1').DataTable().destroy(); $('#table1').find('tbody').append("<tr><td><value1></td><td><value1></td></tr>"); $('#table1').DataTable().draw();
источник
У меня была такая же проблема, вот как я ее исправил:
сначала получите данные с помощью метода по вашему выбору, я использую ajax после отправки результатов, которые внесут изменения в таблицу. Затем очистите и добавьте свежие данные:
var refreshedDataFromTheServer = getDataFromServer(); var myTable = $('#tableId').DataTable(); myTable.clear().rows.add(refreshedDataFromTheServer).draw();
вот источник: https://datatables.net/reference/api/clear ()
источник
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(); }
источник
Этот простой ответ сработал для меня
$('#my-datatable').DataTable().ajax.reload();
ссылка https://datatables.net/forums/discussion/38969/reload-refresh-table-after-event
источник
я бы рекомендовал использовать следующий код.
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>
подробности об этом можно найти здесь
источник
table.ajax.reload();
Вот как я это делаю ... Может, не лучший способ, но определенно проще (ИМХО) и не требует дополнительных плагинов.
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>
он не работает. Но вы могли бы обойтись и без этого. Я не совсем понял, что делает это необходимым, а что нет.источник
Сначала попробуйте уничтожить datatable, затем настройте его снова, например
var table; $(document).ready(function() { table = $("#my-datatable").datatable() $("#my-button").click(function() { table.fnDestroy(); table = $("#my-datatable").dataTable(); }); });
источник
Если вы используете атрибут url, просто выполните
Надеюсь, это кому-то поможет
источник
Используйте этот код, если хотите обновить свою таблицу данных:
$("#my-button").click(function() { $('#my-datatable').DataTable().clear().draw(); });
источник
ну, вы не показали, как / где вы загружаете скрипты, но чтобы использовать функции API плагина, вы должны включить его на свою страницу после загрузки библиотеки DataTables, но до инициализации DataTable.
как это
<script type="text/javascript" src="jquery.dataTables.js"></script> <script type="text/javascript" src="dataTables.fnReloadAjax.js"></script>
источник
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); });
Источник
источник
var myTable = $ ('# tblIdName'). DataTable (); myTable.clear (). rows.add (myTable.data) .draw ();
Это сработало для меня без использования ajax.
источник
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++){ //
.......}
источник
Согласно справке DataTable , я мог сделать для своей таблицы.
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' } ] });
источник
если вы используете datatable v1.10.12, тогда просто вызывайте
.draw()
метод и передавайте требуемые типы рисованияfull-reset
,page
то есть вы повторно нарисуете свой dt с новыми даннымиlet dt = $("#my-datatable").datatable()
// делаем какое-то действие
dt.draw('full-reset')
для получения дополнительной информации ознакомьтесь с документами с данными
источник
Я сделал кое-что, что связано с этим ... Ниже приведен образец 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'); } }
источник
вы должны написать эту строку кода после выполнения операции обновления.
$('#example').DataTable().ajax.reload();
источник
В моем случае (DataTables 1.10.7) у меня работает следующий код;
let table = $(tableName).DataTable(); table.clear().draw(); $(tableName).dataTable({ ... });
Datatables clear (): просто удалите все строки данных из таблицы
источник
function autoRefresh(){ table.ajax.reload(null,false); alert('Refresh');//for test, uncomment } setInterval('autoRefresh()', 5000);
источник
повторно инициализировать данные с помощью init и записать, получить как истинные .. сделано..так просто
например.
TableAjax.init(); retrieve: true,
источник