2013-04-10 17 views
5

Ich verwende Datatables als meine Grid auf einer Webapp. Das Problem ist, der Benutzer muss die Seite immer aktualisieren, um die aktuellen Daten aus der Datenbank zu bekommen, gibt es eine Möglichkeit, dies automatisch zu tun? weil mehrere Apps in dieselbe Tabelle schreiben und die Webapp nur zur Überwachung dient, aber den Zweck übertrifft, wenn der Benutzer die Seite aktualisieren muss, um die aktuellen Daten zu erhalten. hier ist mein Code für die Initialisierung:Wie aktualisiert man die Datentabellen ständig, wenn sich Datensätze in der Datenbank ändern, eine WebSockets oder Long Polling Implementierung

$('.{{datatable['class']}}').dataTable({ 
       "sDom": 'T<"clear">lfrtip', 
       "oTableTools": { 
        "sSwfPath": "includes/swf/copy_csv_xls_pdf.swf",     
        "aButtons": [ 
         { 
          "sExtends":"copy", 
          "mColumns":[{{datatable['flds']}}] 
         }, 
         { 
          "sExtends":"csv", 
          "mColumns":[{{datatable['flds']}}] 
         }, 

         { 
          "sExtends":"xls", 
          "mColumns":[{{datatable['flds']}}] 
         },       
         { 
          "sExtends": "pdf", 
          "mColumns":[{{datatable['flds']}}], 
          "sPdfOrientation": "landscape", 
          "sPdfMessage": "{{datatable['title']}}" 
         } 
        ] 
        },   
       "bProcessing": true, 
       "bServerSide": true, 
       "sAjaxSource": "{{datatable['source']}}", 
       "aoColumns": [   
         {% for column in 0..datatable['columns']-2 %} 
         null, 
         {% endfor %} 
         null 
       ] 

     }); 

ist es eine Möglichkeit, die Liste selbst jedes Mal alles sein kann Aktualisierung (UPDATE/INSERT/DELETE) passiert mit der Datenquelle? Ich habe eine Schleife implementiert, wie Danny vorgeschlagen,

var int=self.setInterval(function(){oTable.fnDraw();},1000); 

aber das Problem ist, dass die Liste ist immer ein lustiger Zustand, siehe attatched Bild enter image description here

Antwort

2

Sie könnten eine Ajax-Anforderung, die auf einer Schleife passiert, durch einen Intervall-Timer, der prüft, ob es neue Daten gibt, seit die Seite zuletzt etwas erhalten hat. Sie müssen herausfinden, was Sie verwenden könnten, um festzustellen, wie die Anzahl der Datensätze oder einen dedizierten Datensatz, der eine Datetime der letzten Aktualisierung/add/delete enthält und wenn die Datetime neu ist, dann wenn die Daten zuletzt gegriffen wurden Auf der Seite würden Sie die Datetime der letzten Datenaktualisierung in einer JavaScript-Variablen aufzeichnen/aktualisieren, um sie bei allen zukünftigen Prüfungen zu verwenden.

+0

können Sie mir ein Beispiel für diese Schleife geben? Zweitens kann ich die Anzahl der Datensätze nicht verwenden, da die meisten Änderungen Aktualisierungen und Aktualisierungen sind. – indago

+0

@indago Ya vielleicht erstellen Sie eine neue Tabelle oder Datei nur zu speichern, wenn das letzte Einfügen/Aktualisieren/Löschen wurde als die Prüfung zu verwenden. – Danny

+0

http://www.w3schools.com/jsref/met_win_setinterval.asp Denken Sie daran, dass wenn Sie ein wirklich niedriges Intervall einstellen, es schneller aktualisiert wird, aber wenn Sie viele Benutzer haben, wird es eine Menge HTTP-Anfragen erstellen, vielleicht auch Sie müssen also das Intervall so ausbalancieren, dass Ihr Server basierend auf Benutzerdatenverkehr und Serverstatistiken ect. – Danny