Estou tentando implementar a funcionalidade pela qual clicar em um botão na tela fará com que minha dataTable jQuery seja atualizada (pois a fonte de dados do lado do servidor pode ter mudado desde que a dataTable foi criada).
Aqui está o que eu tenho:
$(document).ready(function() {
$("#my-button").click(function() {
$("#my-datatable").dataTable().fnReloadAjax();
});
});
Mas quando eu executo isso, não faz nada. Qual é a maneira correta de atualizar a dataTable quando o botão é clicado? Desde já, obrigado!
javascript
jquery
datatables
IAmYourFaja
fonte
fonte
Respostas:
Você pode tentar o seguinte:
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
fonte
_fnAddData
, o que deve ser apenas uma função privada. Isso é arriscado? Digamos que no futuro a assinatura da função possa ser alterada.Com a versão 1.10.0 do DataTables, é integrado e fácil:
var table = $('#example').DataTable(); table.ajax.reload();
ou apenas
$('#example').DataTable().ajax.reload();
http://datatables.net/reference/api/ajax.reload ()
fonte
$('#example').DataTable()
e não$('#example').dataTable()
.cannot reinitialise datatable jquery
. Isso acontece porquetable
foi inicializado repetidamente para cada entrada da tabela. Para evitar isso, certifique-se de inicializartable
apenas uma vez.Você pode usar uma extensa API de DataTable para recarregá-lo
ajax.reload()
Se você declarar sua tabela de dados como
DataTable()
(nova versão), você precisa:var oTable = $('#filtertable_data').DataTable( ); // to reload oTable.ajax.reload();
Se você declarar sua tabela de dados como
dataTable()
(versão antiga), você precisa:var oTable = $('#filtertable_data').dataTable( ); // to reload oTable.api().ajax.reload();
fonte
Destrua a tabela de dados primeiro e, em seguida, desenhe a tabela de dados.
$('#table1').DataTable().destroy(); $('#table1').find('tbody').append("<tr><td><value1></td><td><value1></td></tr>"); $('#table1').DataTable().draw();
fonte
Eu tive o mesmo problema, foi assim que resolvi:
primeiro pegue os dados com o método de sua escolha, eu uso ajax após enviar os resultados que farão alterações na tabela. Em seguida, limpe e adicione novos dados:
var refreshedDataFromTheServer = getDataFromServer(); var myTable = $('#tableId').DataTable(); myTable.clear().rows.add(refreshedDataFromTheServer).draw();
aqui está a fonte: https://datatables.net/reference/api/clear ()
fonte
var ref = $('#example').DataTable(); ref.ajax.reload();
Se você deseja adicionar um botão recarregar / atualizar ao DataTables 1.10, use drawCallback .
Veja o exemplo abaixo (estou usando DataTables com 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(); }
fonte
Esta resposta simples funcionou para mim
$('#my-datatable').DataTable().ajax.reload();
ref https://datatables.net/forums/discussion/38969/reload-refresh-table-after-event
fonte
eu recomendaria usar o código a seguir.
table.ajax.reload(null, false);
A razão para isso, a paginação do usuário não será redefinida na recarga.
Exemplo:
<button id='refresh'> Refresh </button> <script> $(document).ready(function() { table = $("#my-datatable").DataTable(); $("#refresh").on("click", function () { table.ajax.reload(null, false); }); }); </script>
detalhes sobre isso podem ser encontrados aqui
fonte
table.ajax.reload();
É assim que eu faço ... Talvez não seja a melhor maneira, mas é definitivamente mais simples (IMHO) e não requer plug-ins adicionais.
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(); });
Nota: Em meu trabalho com jQuery dataTable, às vezes, se você não tiver,
<thead></thead><tbody></tbody>
ele não funciona. Mas você pode sobreviver sem ele. Eu não descobri exatamente o que o torna obrigatório e o que não é.fonte
Tente destruir a tabela de dados primeiro e depois configure-a novamente, exemplo
var table; $(document).ready(function() { table = $("#my-datatable").datatable() $("#my-button").click(function() { table.fnDestroy(); table = $("#my-datatable").dataTable(); }); });
fonte
Se você usar o atributo url, basta fazer
Espera que ajude alguém
fonte
Use este código, quando quiser atualizar sua tabela de dados:
$("#my-button").click(function() { $('#my-datatable').DataTable().clear().draw(); });
fonte
bem, você não mostrou como / onde está carregando os scripts, mas para usar as funções da API do plug-in, você deve incluí-lo em sua página depois de carregar a biblioteca DataTables, mas antes de inicializar a DataTable.
como isso
<script type="text/javascript" src="jquery.dataTables.js"></script> <script type="text/javascript" src="dataTables.fnReloadAjax.js"></script>
fonte
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); });
Fonte
fonte
var myTable = $ ('# tblIdName'). DataTable (); myTable.clear (). rows.add (myTable.data) .draw ();
Isso funcionou para mim sem usar ajax.
fonte
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++){ //
.......}
fonte
De acordo com a ajuda do DataTable , eu poderia fazer para minha mesa.
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' } ] });
fonte
se estiver usando a tabela de dados v1.10.12, basta chamar o
.draw()
método e passar seus tipos de desenho necessáriosfull-reset
, ou seja ,page
você vai redesenhar seu dt com novos dadoslet dt = $("#my-datatable").datatable()
// faça alguma ação
dt.draw('full-reset')
para mais, verifique a documentação datável
fonte
Eu tinha feito algo relacionado a isso ... Abaixo está um exemplo de javascript com o que você precisa. Há uma demonstração sobre isso aqui: 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'); } }
fonte
você deve escrever esta linha de código após fazer a operação de atualização.
$('#example').DataTable().ajax.reload();
fonte
Para o meu caso (DataTables 1.10.7) o código a seguir funciona para mim;
let table = $(tableName).DataTable(); table.clear().draw(); $(tableName).dataTable({ ... });
Datatables clear (): basta remover todas as linhas de dados da tabela
fonte
function autoRefresh(){ table.ajax.reload(null,false); alert('Refresh');//for test, uncomment } setInterval('autoRefresh()', 5000);
fonte
reinicializar tabela de dados com init e escrever recuperar como verdadeiro ..done..so simples
por exemplo.
TableAjax.init(); retrieve: true,
fonte