Próbuję zaimplementować funkcjonalność, w której kliknięcie przycisku na ekranie spowoduje wyświetlenie mojej tabeli danych jQuery odświeżenie danych (ponieważ źródło danych po stronie serwera mogło ulec zmianie od czasu utworzenia tabeli dataTable).
Oto co mam:
$(document).ready(function() {
$("#my-button").click(function() {
$("#my-datatable").dataTable().fnReloadAjax();
});
});
Ale kiedy to uruchamiam, nic nie robi. Jaki jest właściwy sposób odświeżania tabeli dataTable po kliknięciu przycisku? Z góry dziękuję!
javascript
jquery
datatables
IAmYourFaja
źródło
źródło
Odpowiedzi:
Możesz spróbować następujących rzeczy:
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
źródło
_fnAddData
, która jest przypuszczalnie tylko funkcją prywatną. Czy to ryzykowne? Powiedzmy, że w przyszłości sygnatura funkcji może ulec zmianie.W wersji 1.10.0 DataTables jest wbudowane i łatwe:
var table = $('#example').DataTable(); table.ajax.reload();
Lub tylko
$('#example').DataTable().ajax.reload();
http://datatables.net/reference/api/ajax.reload ()
źródło
$('#example').DataTable()
a nie$('#example').dataTable()
.cannot reinitialise datatable jquery
. Dzieje się tak, ponieważtable
był inicjowany wielokrotnie dla każdego wpisu w tabeli. Aby tego uniknąć, wykonaj inicjalizacjętable
tylko raz.Możesz użyć rozbudowanego interfejsu API DataTable, aby go ponownie załadować
ajax.reload()
Jeśli zadeklarujesz, że dane można zapisać jako
DataTable()
(nowa wersja), potrzebujesz:var oTable = $('#filtertable_data').DataTable( ); // to reload oTable.ajax.reload();
Jeśli deklarujesz, że dane z możliwością przechowywania danych to
dataTable()
(stara wersja), potrzebujesz:var oTable = $('#filtertable_data').dataTable( ); // to reload oTable.api().ajax.reload();
źródło
Najpierw zniszcz datatable, a następnie narysuj datatable.
$('#table1').DataTable().destroy(); $('#table1').find('tbody').append("<tr><td><value1></td><td><value1></td></tr>"); $('#table1').DataTable().draw();
źródło
Miałem ten sam problem, tak to naprawiłem:
najpierw pobierz dane z wybraną przez siebie metodą, używam ajax po przesłaniu wyników, które spowodują zmianę w tabeli. Następnie wyczyść i dodaj nowe dane:
var refreshedDataFromTheServer = getDataFromServer(); var myTable = $('#tableId').DataTable(); myTable.clear().rows.add(refreshedDataFromTheServer).draw();
tutaj jest źródło: https://datatables.net/reference/api/clear ()
źródło
var ref = $('#example').DataTable(); ref.ajax.reload();
Jeśli chcesz dodać przycisk odświeżania / odświeżania do DataTables 1.10, użyj drawCallback .
Zobacz przykład poniżej (używam DataTables z 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(); }
źródło
Ta prosta odpowiedź zadziałała dla mnie
$('#my-datatable').DataTable().ajax.reload();
ref https://datatables.net/forums/discussion/38969/reload-refresh-table-after-event
źródło
polecam użycie następującego kodu.
table.ajax.reload(null, false);
Powodem tego jest, że stronicowanie użytkownika nie zostanie zresetowane po przeładowaniu.
Przykład:
<button id='refresh'> Refresh </button> <script> $(document).ready(function() { table = $("#my-datatable").DataTable(); $("#refresh").on("click", function () { table.ajax.reload(null, false); }); }); </script>
szczegółowe informacje na ten temat można znaleźć tutaj
źródło
table.ajax.reload();
Tak to robię ... Może nie jest to najlepszy sposób, ale jest zdecydowanie prostszy (IMHO) i nie wymaga żadnych dodatkowych wtyczek.
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(); });
Uwaga: w moich działaniach z jQuery dataTable czasami, jeśli jej nie masz
<thead></thead><tbody></tbody>
, nie działa. Ale możesz się bez tego obejść. Nie wiem dokładnie, co sprawia, że jest to wymagane, a co nie.źródło
Spróbuj najpierw zniszczyć datatable, a następnie skonfiguruj go ponownie, na przykład
var table; $(document).ready(function() { table = $("#my-datatable").datatable() $("#my-button").click(function() { table.fnDestroy(); table = $("#my-datatable").dataTable(); }); });
źródło
Jeśli używasz atrybutu url, po prostu zrób
Mam nadzieję, że to komuś pomoże
źródło
Użyj tego kodu, jeśli chcesz odświeżyć datatable:
$("#my-button").click(function() { $('#my-datatable').DataTable().clear().draw(); });
źródło
no cóż, nie pokazałeś, jak / gdzie ładujesz skrypty, ale aby użyć funkcji API wtyczki, musisz dołączyć je do swojej strony po załadowaniu biblioteki DataTables, ale przed zainicjowaniem DataTable.
lubię to
<script type="text/javascript" src="jquery.dataTables.js"></script> <script type="text/javascript" src="dataTables.fnReloadAjax.js"></script>
źródło
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); });
Źródło
źródło
var myTable = $ ('# tblIdName'). DataTable (); myTable.clear (). rows.add (myTable.data) .draw ();
To działało dla mnie bez użycia Ajax.
źródło
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++){ //
.......}
źródło
Według pomocy DataTable mogłem zrobić dla mojego stołu.
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' } ] });
źródło
jeśli używasz DataTable v1.10.12 następnie po prostu wywołanie
.draw()
metody i przekazywaniu wymaganych rodzajów remis tznfull-reset
,page
a następnie będzie ponownie zwrócić dt z nowymi danymilet dt = $("#my-datatable").datatable()
// zrób jakąś akcję
dt.draw('full-reset')
aby uzyskać więcej informacji, zapoznaj się z dokumentacją z możliwością datowania
źródło
Zrobiłem coś związanego z tym ... Poniżej znajduje się przykładowy skrypt javascript z tym, czego potrzebujesz. Tutaj znajduje się demo: 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'); } }
źródło
musisz napisać tę linię kodu po wykonaniu operacji aktualizacji.
$('#example').DataTable().ajax.reload();
źródło
W moim przypadku (DataTables 1.10.7) następujący kod działa dla mnie;
let table = $(tableName).DataTable(); table.clear().draw(); $(tableName).dataTable({ ... });
Datatables clear (): Po prostu usuń wszystkie wiersze danych z tabeli
źródło
function autoRefresh(){ table.ajax.reload(null,false); alert('Refresh');//for test, uncomment } setInterval('autoRefresh()', 5000);
źródło
ponownie zainicjuj datatable za pomocą init i napisz pobieranie jako prawdziwe.. zrobione ... tak proste
na przykład.
TableAjax.init(); retrieve: true,
źródło