Mysql
 sql >> Database >  >> RDS >> Mysql

C'è un modo per "ascoltare" un evento del database e aggiornare una pagina in tempo reale?

Questo non è troppo difficile. Il modo più semplice sarebbe aggiungere tramite .append:

$( '#table > tbody:last').append('<tr id="id"><td>stuff</td></tr>');

L'aggiunta di elementi in tempo reale non è del tutto possibile. Dovresti eseguire una query Ajax che si aggiorna in un ciclo per "catturare" la modifica. Quindi, non del tutto in tempo reale, ma molto, molto vicino ad esso. Il tuo utente non noterebbe davvero la differenza, anche se il carico del tuo server potrebbe.

Ma se hai intenzione di essere più coinvolto, ti suggerisco di guardare DataTables . Ti offre alcune nuove funzionalità, tra cui l'ordinamento, il paging, il filtraggio, la limitazione, la ricerca e il caricamento ajax. Da lì, puoi aggiungere un elemento tramite ajax e aggiornare la visualizzazione della tabella, o semplicemente aggiungerlo tramite la sua API. Uso DataTables nella mia app da un po' di tempo ormai e sono stati costantemente citati come la funzione numero 1 che rende utilizzabile l'immensa quantità di dati.

--Modifica --

Poiché non è ovvio, per aggiornare la DataTable che chiami imposta la tua chiamata Datatables su una variabile:

var oTable = $('#selector').dataTable();

Quindi esegui questo per eseguire l'aggiornamento:

  oTable.fnDraw(false);

AGGIORNAMENTO -- 5 anni dopo, febbraio 2016:questo è molto più possibile oggi rispetto al 2011. I nuovi framework Javascript come Backbone.js possono connettersi direttamente al database e attivare modifiche sugli elementi dell'interfaccia utente, comprese le tabelle su modifiche, aggiornamenti o cancellazione dei dati....è uno dei principali vantaggi di questi framework. Inoltre, le interfacce utente possono essere alimentate con aggiornamenti in tempo reale tramite connessioni socket a un servizio Web, che può anche essere catturato e utilizzato. Sebbene la tecnica qui descritta funzioni ancora, oggi ci sono molti più modi "dal vivo" di fare le cose.