J'ai actuellement une conversation basée sur Ajax, que j'essaie de rationaliser en chargement du script de discussion lorsqu'une mise à jour se produit. Ainsi, rien n'a besoin de continuer à charger si rien n'a changé dans la base de données.
Ma logique actuelle dit: p>
seinterval () code>) li>
ul> Si rien n'a changé, cependant, il semble assez inefficace de continuer à l'appeler. Au lieu de cela, ce que je voudrais faire est de: p>
- Fonction JavaScript vérifie s'il y a des nouveaux em> connecteurs dans la base de données li>
- Si oui - chargez les nouveaux journaux, si non - laissez les journaux actuellement affichés seuls. Li>
ol>
Comment ira-je à ce sujet, cependant? La fonction que j'utilise actuellement est la suivante: p> xxx pré> p>
5 Réponses :
Comme vous savez que la fonction .Load remplit un élément avec la sortie renvoyée par votre fichier chat.php. Cette fonction .Load fonctionne deux étapes: elle fait une demande AJAX à la chat.php, puis définit la valeur de l'élément à la sortie de chat.php. Ce que vous voulez faire est juste la première étape. Pour ce faire, utilisez la fonction .ajax p>
http://api.jquery.com/jquery.ajax/ p>
Au lieu d'utiliser le fichier chat.php, je suggérerais d'appeler un script différent comme ischartupdated.php. Ce script fera comme si le nom le suggère et vérifie s'il y a eu des changements dans la discussion. Vous pouvez ensuite utiliser ce résultat pour déterminer si vous devez appeler votre fonction .charger. P>
Avec la fonction Ajax Comment obtenez-vous la valeur renvoyée à partir du script PHP en vérifiant?
Vous devez spécifier une fonction de rappel «succès». Vous verrez comment cela fonctionne sur la page que je vous ai lié.
de toute façon, vous devez interroger la DB du côté serveur, de manière presque sans importance si elle renvoie les données du journal ou une seule valeur.
Vous pouvez décider de ne pas mettre à jour #chatarea, basé sur une valeur de retour, mais vous devez faire un autre appel pour récupérer les journaux, sinon. P>
Un moyen relativement simple de le faire est d'utiliser Ajax pour aller chercher une page qui vous dit simplement s'il y a eu une mise à jour. Donc, par exemple, vous pouvez récupérer une page comme (Si vous n'avez pas utilisé Ajax avant, c'est un très bon tutoriel: http: // www .tizag.com / AjaxTutorial / ) P>
Une autre solution (et une autre que je pense est probablement meilleure) est de charger une page qui n'a que les lignes de discussion les plus récentes. Par exemple, disons que vous affichez actuellement des lignes 1 à 14 de la discussion. Vous pouvez ensuite utiliser Ajax pour aller chercher le contenu de, par exemple, checkforupdate.php code> qui a un 1 ou un 0 pour indiquer s'il y a quelque chose de nouveau dans le chat. Si vous avez obtenu un retour 1, vous pouvez aller de l'avant et charger la page
chat.php code>. P>
getlines.php? S = 14 code>. Cette page afficherait uniquement les lignes de la discussion après la ligne 14. Vous venez alors d'ajouter ces lignes à la fin de la fenêtre de discussion actuelle. P>
Je passerais Ainsi, imaginez que chaque message de conversation a une pièce d'identité. Je concevrais mon ... et transmet une belle petite structure de données (une matrice d'objets, codé dans JSON , disons). p> Donc, s'il n'y a pas de nouveaux messages de discussion, le serveur ne fait que passer un tableau vide. P> Je ne pense pas que vous puissiez être plus efficace que cela. p> EDIT: P> Je me rends compte que cela fait de cette façon nécessite un peu plus de codage côté client. Vous ne venez plus de mettre à jour certaines div avec l'historique de chat. Vous aurez également besoin d'un gestionnaire sur votre appel Ajax qui itière sur les résultats, et pour chaque message, construisez de manière programmative un horodestamp code> s (ou
message_id code> s) avec des messages de discussion que le script côté serveur envoie à un client. Ensuite, le client demande simplement de nouveaux messages et que le serveur n'envoie que ce qui est nouveau.
chat.php code> pour accepter un paramètre comme: p>
12345 code> serait le
ID code> du dernier message que le client a vu.
chat.php code> fait essentiellement quelque chose comme: p>
div code> pour cette ligne, puis appendez-le à votre chat
div < / code>. p> p>
Je créerais d'abord un fichier appelé exemple Messages.php qui ressemblait à ceci comme ceci: puis sur le côté du client à l'aide de jQuery ou quelque chose comme ça, je ferais quelque chose comme ça: p> au moins il fonctionne assez bien dans ma tête: p p> p>
$. POST ("Messages.PHP ', New_Messages_Handler) CODE> LI>
$. Publier ("Messages.php ', {depuis: Dernier_DateTime_we_have}, new_messages_handler) CODE> LI>