2009-07-27 7 views
7

J'ai une base de données de liens que les utilisateurs peuvent soumettre. Chaque fois qu'un utilisateur soumet un nouveau lien, il est ajouté à la base de données. J'ai une page séparée qui liste tous les liens soumis. Comment puis-je avoir cette page séparée vérifier la base de données pour les changements et les charger avec AJAX quand il les trouve?Utilisez PHP + jQuery AJAX pour vérifier la base de données MySQL pour les changements et charger les modifications?

Répondre

14

La page qui doit être mise à jour en fonction du contenu de la base de données doit interroger le DB de temps en temps. Javascript est une technologie côté client et n'est pas conçu pour interagir directement avec les serveurs principaux.

Le javascript ressemblerait à ceci (en utilisant jquery):


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

Cela fera une requête POST à ​​la page que vous écrirez (checkForChanges.php) avec la variable nommée currentNumber qui a une valeur qui est la représentation sous forme de chaîne du nombre de liens actuellement dans la table (comptez-les comme bon vous semble). La partie fonction (dat) du code est la fonction de rappel qui est exécutée lorsque la requête est terminée (c'est-à-dire lorsque la page php a terminé le traitement et que le texte résultant a été reçu dans le navigateur).

Je reviendrai sur ce que cela fait quand j'ai expliqué ce que fait la page PHP. Vous ne nous avez rien dit sur la structure de votre base de données, mais puisque vous permettez aux gens d'ajouter des liens, vous devez avoir une séquence définie quelque part qui garde un identifiant entier pour le lien (de sorte que chaque lien peut être donné un identifiant unique dans la base de données). Je suppose que vous avez appelé ce « liens-count » Vous devez créer une simple page php avec le pseudo-code suivant:



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

La sortie retournée par cette page sera un document XML avec un nœud pour chaque lien qui contient le code HTML que vous voulez mettre dans votre cellule de tableau.

Maintenant, nous pouvons revenir à la fonction de rappel dans la demande .post $ dans votre code Java côté client:


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

dat est le texte retourné, l'envelopper comme un objet jquery puis trouver le collection de balises nommée 'lien'. pour chaque balise 'link' renvoyée par la page php, exécutez une fonction qui ajoute une nouvelle ligne à la table linksTable qui contient les données à l'intérieur des balises link.

+1

Eh bien, c'est une réponse assez complète que j'ai pris un certain temps ... bballbackus, l'avez-vous essayé? Pourriez-vous accepter ou voter pour ou au moins donner votre avis dans vos commentaires? Merci – sillyMunky

0

Vous pouvez avoir un javascript actif sur la page séparée qui interroge essentiellement la base de données pour les modifications ou vous pouvez avoir une fonction de rappel le faire après une soumission réussie. Je ne suis pas vraiment sûr de ce qui se passe ici, donc je ne sais pas vraiment quoi recommander.

Questions connexes