9
votes

AJAX CHAT - Seule la mise à jour s'il y a un changement

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:

  • La fonction JavaScript incendie toutes les 1/2 seconde pour obtenir les journaux de discussion ( seinterval () )

    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:

    1. Fonction JavaScript vérifie s'il y a des nouveaux connecteurs dans la base de données
    2. Si oui - chargez les nouveaux journaux, si non - laissez les journaux actuellement affichés seuls.

      Comment ira-je à ce sujet, cependant? La fonction que j'utilise actuellement est la suivante: xxx


0 commentaires

5 Réponses :


0
votes

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

http://api.jquery.com/jquery.ajax/

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.


2 commentaires

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é.



0
votes

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.


0 commentaires

1
votes

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 checkforupdate.php 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 .

(Si vous n'avez pas utilisé Ajax avant, c'est un très bon tutoriel: http: // www .tizag.com / AjaxTutorial / )

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, getlines.php? S = 14 . 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.


0 commentaires

5
votes

Je passerais horodestamp s (ou message_id 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.

Ainsi, imaginez que chaque message de conversation a une pièce d'identité. Je concevrais mon chat.php pour accepter un paramètre comme: xxx

12345 serait le ID du dernier message que le client a vu. chat.php fait essentiellement quelque chose comme: xxx

... et transmet une belle petite structure de données (une matrice d'objets, codé dans JSON , disons).

Donc, s'il n'y a pas de nouveaux messages de discussion, le serveur ne fait que passer un tableau vide.

Je ne pense pas que vous puissiez être plus efficace que cela.

EDIT:

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 div pour cette ligne, puis appendez-le à votre chat div < / code>.


0 commentaires

0
votes

Je créerais d'abord un fichier appelé exemple Messages.php qui ressemblait à ceci comme ceci: xxx

puis sur le côté du client à l'aide de jQuery ou quelque chose comme ça, je ferais quelque chose comme ça:

  1. Obtenez des messages en utilisant quelque chose comme $. POST ("Messages.PHP ', New_Messages_Handler)
  2. Dans le gestionnaire, je créerais HTML pour chaque nouveau message que nous avons récupéré et que nous l'appendez / prépendez-le au conteneur de discussion, ainsi que de stocker quelle heure le dernier message a été créé.
  3. Attendez un moment
  4. Obtenez de nouveaux messages à l'aide de quelque chose comme $. Publier ("Messages.php ', {depuis: Dernier_DateTime_we_have}, new_messages_handler)
  5. aller à 2

    au moins il fonctionne assez bien dans ma tête: p


0 commentaires