J'essaie de recharger une table de données via un appel json. J'ai utilisé DataTables-1.10.9 et jquery-2.1.4.
J'ai essayé de payer avec l'API .ajax dans datatable et je suis arrivé nulle part, alors j'ai pensé essayer cette approche que j'ai poursuivie dans le passé.
Si je casse lorsque le code HTML a été ajouté à la table, cela semble OK (par cela, je veux dire que les anciennes données ont été supprimées et que les nouvelles données s'affichent. Mais lorsque $ ('# tblRemittanceList'). DataTable ( {...}); la commande est émise à nouveau, elle "recharge" les anciennes données, pas les nouvelles. Si je n'utilise pas de tables de données, le tableau brut affiche les données correctes.
//----------------------------------------------------------------------------------------
function fncOpenRemittancesRead(pFrRem,pToRem) {
wsUrl = "../Json/OpenRemittances.asp" +
"?qryDatabase=" + encodeURIComponent(wsDatabase) +
"&qryFrRemittance=" + encodeURIComponent(pFrRem) +
"&qryToRemittance=" + encodeURIComponent(pToRem);
$('body').addClass('waiting');
$.getJSON(wsUrl, function(data) {
fncOpenRemittancesFill(data);
$('body').removeClass('waiting');
});
}
//----------------------------------------------------------------------------------------
function fncOpenRemittancesFill(pData) {
var wsHtml = '';
$('#tblRemittanceList tbody').empty();
for (var i = 0; i < pData.length; i++) {
wsHtml += '<tr>';
wsHtml += '<td>' + trim(pData[i].col_1) + '</td>';
wsHtml += '<td>' + trim(pData[i].col_2) + '</td>';
wsHtml += '<td>' + trim(pData[i].col_3) + '</td>';
wsHtml += '<td>' + fncFormatDate(pData[i].col_4,4) + '</td>';
wsHtml += '<td>' + fncFormatNumber(pData[i].col_5,2,"N") + '</td>';
wsHtml += '<td>' + trim(pData[i].col_6) + '</td>';
wsHtml += '<td>' + fncFormatNumber(pData[i].col_7,2,"N") + '</td>';
wsHtml += '<td>' + trim(pData[i].col_8) + '</td>';
wsHtml += '</tr>';
}
$('#tblRemittanceList > tbody:last').append(wsHtml);
$('#tblRemittanceList').dataTable({
"autoWidth":false
, "destroy":true
, "info":false
, "JQueryUI":true
, "ordering":true
, "paging":false
, "scrollY":"500px"
, "scrollCollapse":true
});
}
Lorsque DataTables détruit la table en raison de l'option destroy:true
, Il restaure le contenu d'origine et supprime le contenu que vous avez généré.
Supprimez l'option destroy:true
Et détruisez la table avant de manipuler la table avec la méthode API destroy()
.
if ( $.fn.DataTable.isDataTable('#tblRemittanceList') ) {
$('#tblRemittanceList').DataTable().destroy();
}
$('#tblRemittanceList tbody').empty();
// ... skipped ...
$('#tblRemittanceList').dataTable({
"autoWidth":false
, "info":false
, "JQueryUI":true
, "ordering":true
, "paging":false
, "scrollY":"500px"
, "scrollCollapse":true
});
Supprimez l'option destroy:true
Et au lieu de détruire et de recréer la table, utilisez clear()
pour effacer le contenu de la table, rows.add()
= pour ajouter les données du tableau puis draw()
pour redessiner le tableau.
Dans ce cas, vous devrez initialiser DataTables une fois à l'initialisation de la page.
Vous pouvez initialiser vos tables de données à l'aide de l'option de récupération comme celle-ci:
var table = $('#myTable').DataTable( {
dom: 'Bfrtip',
retrieve: true, ...
Ensuite, vous devez l'effacer et le détruire:
$('#myTable').DataTable().clear().destroy();
À la fin, vous recréez vos tables de données:
var table = $('#myTable').DataTable( {
dom: 'Bfrtip',
retrieve: true,
Consultez le tutoriel de récupération ici: https://datatables.net/reference/option/retrieve
datatable refresh
$('#Clienttbl').dataTable().fnClearTable();
utilisez simplement la méthode destroy () pour détruire la table comme ceci:
$('#experience-table').DataTable().destroy();
et le réinitialiser comme cet exemple:
var table= $('#experience-table').DataTable({
processing: true,
serverSide: true,
ajax: '{{url('employee/experience/list/experience')}}'+'/'+emp_id,
columns: [
{ data: 'emp_no', name: 'emp_no' },
{ data: 'position', name: 'position' },
{ data: 'organization', name: 'organization' },
{ data: 'duration', name: 'duration' },
{ data: 'action', name: 'action' },
],
searching: false
});