2009-07-27 21 views

risposta

14

La pagina che deve essere aggiornata in base ai contenuti del database deve eseguire il polling del DB ogni tanto. Javascript è una tecnologia lato client e non è progettata per interagire direttamente con i server back-end.

Il javascript sarebbe simile a questa (usando jQuery):


$.post("/webroot/checkForChanges.php", 
     { currentNumber: currNumString }, 
     function(dat){ 
      $(dat).find('link').each(function() { 
       $('#linksTable').append(""+$(this).text()+""); 
      }); 
}); 

Questo farà una richiesta POST alla pagina si scriverà (checkForChanges.php) con la variabile denominata currentNumber che ha un valore che è la rappresentazione in stringa del numero di link attualmente presenti nella tabella (contali come preferisci).

la parte funzione (dat) del codice è la funzione di callback che viene eseguita al termine della richiesta (ovvero quando la pagina php ha terminato l'elaborazione e il testo risultante è stato ricevuto nel browser).

Tornerò a ciò che sta facendo quando ho spiegato cosa sta facendo la pagina PHP.

Non ci hai detto nulla sulla struttura del tuo database, ma dal momento che stai permettendo alle persone di aggiungere link devi avere una sequenza definita da qualche parte che tiene traccia di un ID intero per il link (in modo che ogni link possa essere dato un ID univoco nel database). Darò per scontato che hai chiamato questo 'link-count' Si dovrebbe creare una pagina php semplice con il seguente pseudo-codice:



//open a database connection 
$DB = connect(name, user, password); 

//receive value 
$currNum = $_POST['currentNumber']; 

//check to see if sequence number has incremented since last time: 
$seqNum = query("SELECT currval('links-count')"); 

if ($seqNum == $currNum){ 
    exit(0); 
} //if they are the same, just exit the page without writing anything 

//otherwise, carry on... get the result of your query (for new links) 
//and loop through, echoing return data 

$newEntries = query("SELECT url FROM links WHERE id > ".$currNum); 

echo "<newlinks>"; 

while ($result = fetch_result($newEntries)) { 
    echo "<link><a>".$result."</a></link>"; 
} 

echo "</newlinks>"; 

L'output restituito da questa pagina sarà un documento XML con un nodo per ogni link che contiene l'HTML che vuoi inserire nella tua cella di tabella.

Ora possiamo tornare alla funzione di callback nella richiesta $ .post nel codice Java lato client:


function(dat){ 
    $(dat).find('link').each(function() { 
      $('#linksTable').append(""+$(this).text()+""); 
    }); 
}); 

dat è il testo restituito, avvolgerlo come un oggetto jQuery e poi trovare il raccolta di tag denominati 'link'. per ogni tag 'link' restituito dalla pagina php, eseguire una funzione che aggiunge una nuova riga di tabella al linkTable che contiene i dati all'interno dei tag di collegamento.

+1

Beh, è ​​una risposta piuttosto completa. Mi ci è voluto un po 'di tempo ... bballbackus, ci hai provato? Potresti accettare o votare per questo o almeno dare un feedback nei tuoi commenti? Grazie – sillyMunky

0

È possibile avere un javascript attivo nella pagina separata che esegue il polling del db per le modifiche o si può fare una funzione di callback dopo una trasmissione riuscita. Non sono esattamente sicuro di cosa stia succedendo, quindi non so davvero cosa consigliare.

Problemi correlati