2017-07-14 8 views
0

Ich habe ein einfaches Messaging-System und ich die Nachrichten aus der Datenbank mit jQuery/AJAX und Anhängen an eine Tabelle abrufen. Ich wollte Seitenumbrüche für die Nachrichten erstellen, daher entschied ich mich für das DataTables-Plugin (https://datatables.net/).jQuery Datatables mit dynamischen Daten

Ich habe Probleme bei der Verwendung dieser mit meinen dynamisch generierten Daten. Ich habe auch Funktionen wie "Nachricht löschen", die dann die Nachricht löschen und dann die Nachrichten wieder abrufen würde (aktualisieren Sie die Tabelle). Ich bekomme den Fehler "DataTable kann nicht neu initialisiert werden".

Dies ist mein Code so weit:

function getmessages(){ 
    $.ajax({ 
     type: "POST", 
     url: "modules/ajaxgetmessages.php", 
     dataType: 'json', 
     cache: false, 
     }) 
     .success(function(response) { 
      if(!response.errors && response.result) { 
       $("#tbodymessagelist").html(''); 
       $.each(response.result, function(index, value) { 
        var messagesubject = value[3]; 
        var messagecontent = value[4]; 
        var messagetime = value[5]; 
        var sendername = value[2]; 
        var readstatus = value[7]; 
        var messageid = value[8]; 
        if (readstatus==0){ 
         messageheader += '<tr><td><input type="checkbox" class="inboxcheckbox input-chk"></td><td class="sendername"><b>'+sendername+'</b></td><td class="messagesubject"><b>'+messagesubject+'</b></td><td><b>'+messagetime+'</b></td><td class="messageid" style="display:none">'+messageid+'</td><td class="readstatus" style="display:none">'+readstatus+'</td><td class="messagecontent" style="display:none"><b>'+messagecontent+'</b></td></tr>'; 
        } else { 
         messageheader += '<tr><td><input type="checkbox" class="inboxcheckbox input-chk"></td><td class="sendername">'+sendername+'</td><td class="messagesubject">'+messagesubject+'</td><td>'+messagetime+'</td><td class="messageid" style="display:none">'+messageid+'</td><td class="readstatus" style="display:none">'+readstatus+'</td><td class="messagecontent" style="display:none"><b>'+messagecontent+'</b></td></tr>';               
        } 
       }); 
       $("#tbodymessagelist").html(messageheader); 
       $('#tblinbox').DataTable({ 
        "paging": true, 
        "ordering": false, 
        "info":  false 
       }); 
      } else { 
       $.each(response.errors, function(index, value) { 
        $('input[name*='+index+']').addClass('error').after('<div class="errormessage">'+value+'</div>') 
       }); 
      } 
     });  
} 

Wie kann ich also im Wesentlichen auf meinen Tisch, nachdem das Löschen von Nachrichten oder anderen Funktionen und dann auf „aktualisieren“, um die Tabelle Änderungen vornehmen? Es zeigt auch Showing 0 to 0 of 0 entries in der Fußzeile, obwohl dort Einträge sind.

+0

Versuch 'zerstören: true' –

+0

Es gibt Optionen in Datentabellen Ajax haben - so können Sie Datentabellen erhalten Sie alle schweren Sachen zu tun, Paginieren/Bestellung, so dass Sie nicht mehr alle Zeilen als eine haben zu laden. Dies wird auf lange Sicht gut sein, wenn es viele Nachrichten gibt. –

Antwort

0

Sie müssen die Datentabelle zerstören, bevor Sie eine neue Instanz erstellen.

 
      ` 
      $('#tblinbox').DataTable.destroy(); 
      $('#tblinbox').empty();