2013-04-10 8 views
5

Sto utilizzando i datatables come mia griglia su una webapp. Il problema è che l'utente deve aggiornare sempre la pagina per ottenere i dati correnti dal database, c'è un modo in cui questo può essere fatto automaticamente? perché diverse app scrivono sulla stessa tabella e la webapp è solo per il monitoraggio, ma batte lo scopo se l'utente deve aggiornare la pagina per ottenere i dati correnti. Ecco il mio codice di inizializzazione:come aggiornare costantemente i datatables quando i record cambiano nel database, un websocket o un'implementazione di polling lungo

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

     }); 

c'è un modo in cui la lista può essere aggiornarsi ogni volta nulla (UPDATE/INSERT/DELETE) accade all'origine dati? Ho implementato un ciclo come suggerito Danny,

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

ma il problema è che la lista è sempre stato divertente, vedere l'immagine attaccato enter image description here

risposta

2

Si potrebbe avere una richiesta AJAX che accade su un loop da un timer che controlla se ci sono nuovi dati da quando l'ultima pagina ha ricevuto qualcosa. Dovresti capire che cosa potresti usare per determinare quel numero di record o un record dedicato che contiene un datetime dell'ultimo aggiornamento/aggiunta/eliminazione e se il datetime è più recente, quindi quando i dati sono stati catturati l'ultima volta lo aggiorna di nuovo ecc. Nella pagina è possibile registrare/aggiornare il datetime dell'ultimo aggiornamento dei dati in una variabile javascript da utilizzare in tutti i controlli futuri.

+0

puoi darmi un esempio di questo ciclo? secondo non posso usare il conteggio dei record perché la maggior parte delle modifiche sono aggiornamenti e aggiornamenti non cambi il conteggio dei record. – indago

+0

@indago Ya potrebbe creare una nuova tabella o file solo per memorizzare quando è stato effettuato l'ultimo inserimento/aggiornamento/eliminazione da utilizzare come controllo. – Danny

+0

http://www.w3schools.com/jsref/met_win_setinterval.asp Ricorda che se imposti un intervallo veramente basso potrebbe aggiornarsi più velocemente, ma se ci sono molti utenti su questo creerà molte richieste http, forse troppo molti quindi è necessario bilanciare l'intervallo a ciò che il server può gestire in base al traffico dell'utente e alle statistiche del server ect. – Danny

Problemi correlati