2013-04-10 27 views
5

Używam datatables jako mojej siatki na webappie. Problem polega na tym, że użytkownik musi odświeżyć stronę zawsze, aby uzyskać aktualne dane z bazy danych, czy jest sposób, w jaki można to zrobić automatycznie? ponieważ kilka aplikacji zapisuje dane w tej samej tabeli, a aplikacja internetowa służy tylko do monitorowania, ale bije na cel, jeśli użytkownik musi odświeżyć stronę, aby pobrać aktualne dane. tutaj jest mój kod inicjalizacji:jak stale aktualizować datatables, gdy zmieniają się rekordy w bazie danych, websockets lub długie wdrażanie pollingu

$('.{{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 
       ] 

     }); 

czy istnieje sposób lista może być aktualizowanie sobie za każdym razem coś (UPDATE/INSERT/DELETE) akurat źródła danych? I wprowadziły pętlę jak sugeruje Danny,

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

ale problemem jest to, że lista jest zawsze stanem zabawne, zobaczyć attatched obraz enter image description here

Odpowiedz

2

Mogłeś żądania AJAX, co dzieje się na pętli przez licznik czasu, który sprawdza, czy są nowe dane, ponieważ strona ostatnio otrzymała cokolwiek. Będziesz musiał dowiedzieć się, co możesz użyć do ustalenia, że ​​podobnie jak liczba rekordów lub dedykowanego rekordu, który przechowuje datetime z ostatniej aktualizacji/dodaj/usuń, a jeśli datetime jest nowsza, a następnie, gdy dane zostały po raz ostatni chwycone, zaktualizuj ją ponownie itp. Na stronie można zapisać/zaktualizować datetime ostatniej aktualizacji danych w javascript var, aby użyć jej we wszystkich przyszłych kontrolach.

+0

czy możesz podać przykład tej pętli? po drugie nie mogę używać liczby rekordów, ponieważ większość zmian to aktualizacje i aktualizacje, które nie zmieniają rekordów. – indago

+0

@indago Ya może utworzyć nową tabelę lub plik tylko po to, aby ostatnia wstawka/aktualizacja/usunięcie została użyta jako czek. – Danny

+0

http://www.w3schools.com/jsref/met_win_setinterval.asp Pamiętaj, że jeśli ustawisz naprawdę niski interwał, może on aktualizować się szybciej, ale jeśli masz wielu użytkowników, stworzy wiele żądań http, może też wiele więc musisz zrównoważyć interwał do tego, co twój serwer może obsłużyć w oparciu o ruch użytkownika i statystyki serwera ect. – Danny