2009-07-27 5 views
7

Ich habe eine Datenbank mit Links, die Benutzer einreichen können. Jedes Mal, wenn ein Benutzer einen neuen Link einreicht, wird er der Datenbank hinzugefügt. Ich habe eine separate Seite, auf der alle eingereichten Links aufgelistet sind. Wie kann ich diese separate Seite die Datenbank auf Änderungen prüfen lassen und sie mit AJAX laden, wenn sie sie findet?Verwenden Sie PHP + jQuery AJAX, um die MySQL-Datenbank auf Änderungen zu prüfen und die Änderungen zu laden?

Antwort

14

Die Seite, die abhängig vom Datenbankinhalt aktualisiert werden muss, muss die Datenbank ab und zu abfragen. Javascript ist eine clientseitige Technologie und nicht für die direkte Interaktion mit Back-End-Servern konzipiert.

würde die Javascript wie folgt aussehen (mit Jquery):


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

Dies wird eine POST-Anfrage an die Seite machen Sie ist schreiben (checkForChanges.php) mit der Variable mit dem Namen currentNumber die, die einen Wert hat die Zeichenfolgendarstellung der Anzahl der Links, die derzeit in der Tabelle enthalten sind (zähle diese, wie du willst).

Die Funktion (dat) Teil des Codes ist die Callback-Funktion, die ausgeführt wird, wenn die Anfrage abgeschlossen ist (wenn die PHP-Seite die Verarbeitung abgeschlossen hat und der resultierende Text in den Browser empfangen wurde).

Ich werde zurückkommen, was das tut, wenn ich erklärt habe, was die PHP-Seite macht.

Sie haben uns nichts über Ihre Datenbankstruktur gesagt, aber da Sie Benutzern erlauben, Links hinzuzufügen, müssen Sie irgendwo eine Sequenz definieren, die eine Integer-ID für den Link verfolgt (so dass jeder Link sein kann) eine eindeutige ID in der Datenbank gegeben). Ich nehme an, Sie diese ‚Links-count‘ genannt habe Sie eine einfache PHP-Seite mit dem folgenden Pseudo-Code erstellen sollten:



//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>"; 

Die Ausgabe von dieser Seite zurückgegeben wird ein XML-Dokument mit einem Knoten für jeden Link, der den HTML-Code enthält, den Sie in Ihre Tabellenzelle einfügen möchten.

Jetzt können wir an die Callback-Funktion in der $ .post Anfrage in Ihrem clientseitigen Java-Code zurück:


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

dat ist der zurückgegebene Text, wickeln Sie es als ein jQuery-Objekt und dann finden die Sammlung von Tags mit dem Namen "Link". Führen Sie für jedes von der PHP-Seite zurückgegebene Link-Tag eine Funktion aus, die eine neue Tabellenzeile an die LinksTable anfügt, die die Daten innerhalb der Link-Tags enthält.

+1

Nun, es ist eine ziemlich vollständige Antwort, die ich mir etwas Zeit genommen habe ... bballbackus, hast du es versucht? Kannst du das akzeptieren oder dafür stimmen oder zumindest Feedback in deinen Kommentaren geben? Vielen Dank – sillyMunky

0

Sie können ein aktives Javascript auf der separaten Seite haben, die im Grunde die Datenbank nach Änderungen abfragt, oder Sie können eine Callback-Funktion nach einer erfolgreichen Übermittlung ausführen lassen. Ich bin mir nicht ganz sicher, was hier abgeht, also weiß ich nicht wirklich, was ich empfehlen soll.

Verwandte Themen