Ajax/Php rafraichissement automatique
Mik3five
-
Atropa Messages postés 1940 Date d'inscription Statut Membre Dernière intervention -
Atropa Messages postés 1940 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis en train de coder un petit tchat. Mon problème est le suivant.
Actuellement, j'utilise un script qui est rappelé régulièrement avec set interval.
Ce script récupère les données dans une base de donnée ou sont enregistrée les messages envoyé
J'utilise une zone unique pour afficher aussi toute mes pages, et j'utilise cette même zone pour le tchat. Le probléme c'est qu'avec le rafraichissement automatique.. il m'est impossible de charger les autres pages en Ajax, car celle-ci disparaisent automatiquement au bout d'une seconde.
J'aimerai que ma page de tchat se rafraichisse, uniquement que lorsqu'il ya des nouvelles données dans la base de donnée.
Je cherche donc une méthode ,ou une structure de controle simple.. qui n'implique pas un rafraichissement périodique.
Je suis en train de coder un petit tchat. Mon problème est le suivant.
Actuellement, j'utilise un script qui est rappelé régulièrement avec set interval.
Ce script récupère les données dans une base de donnée ou sont enregistrée les messages envoyé
J'utilise une zone unique pour afficher aussi toute mes pages, et j'utilise cette même zone pour le tchat. Le probléme c'est qu'avec le rafraichissement automatique.. il m'est impossible de charger les autres pages en Ajax, car celle-ci disparaisent automatiquement au bout d'une seconde.
J'aimerai que ma page de tchat se rafraichisse, uniquement que lorsqu'il ya des nouvelles données dans la base de donnée.
Je cherche donc une méthode ,ou une structure de controle simple.. qui n'implique pas un rafraichissement périodique.
A voir également:
- Ajax/Php rafraichissement automatique
- Réponse automatique thunderbird - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Logiciel de sauvegarde automatique gratuit - Guide
- Easy php - Télécharger - Divers Web & Internet
- Réponse automatique gmail - Guide
3 réponses
bonsoir,
pour un chat il faut faire un serveur
et si tu le fais avec un xhr faire une fonction récursive
du genre :
et en php :
pour un chat il faut faire un serveur
et si tu le fais avec un xhr faire une fonction récursive
du genre :
function chatRefresh() { var Xhr = new XHR(); /* Requête */ Xhr.onreadystatechange = function(){ if (Xhr.status == 200 && Xhr.readyState == 4) { /* Mise a jour du cadre */ chatRefresh(); } }; }
et en php :
<?php /* vérification que la requête est légale */ while(true) { /* Test des nouveau message */ if(/*Nouveau message*/) { echo /* chaine */ break; } else sleep(1); } ?>
if(isset($_SESSION['pseudo']) && !empty($_SESSION['pseudo'])) { include_once($_SERVER['DOCUMENT_ROOT'].'/include/sql2.php'); while(true) { if(connect('chat')) { $selection='SELECT * FROM 'discussion' WHERE 'send'=0 AND 'nosend'=1 ORDER BY 'id' DESC LIMIT 30'; $requete=mysql_query($selection) or die('Erreur dans le fichier '.__FILE__.' à la ligne '.__LINE__.' '.mysql_error()); $resultat=mysql_num_rows($requete); writeReq($selection); writeReq($resultat); if($resultat>0) { $_SESSION['resultat']=$resultat; while($message=mysql_fetch_assoc($requete)) { $texte.=$message['id'].'->'.htmlspecialchars($message['pseudo']).':'; $texte.=htmlspecialchars($message['date']); $texte.=htmlspecialchars($message['texte']).'<br>'; } echo '----------------------------<br>'; echo $texte; break; } else { sleep(2); break; } } else { echo 'Erreur de connexion'; sleep(2); break; } } } else { echo '0'; }
<?php if(isset($_SESSION['pseudo']) && !empty($_SESSION['pseudo'])) exit('0'); include_once($_SERVER['DOCUMENT_ROOT'].'/include/sql2.php'); while(true) { if(!connect('chat')) exit('Erreur de connexion'); $selection='SELECT * FROM discussion WHERE send=0 AND nosend=1 ORDER BY id DESC LIMIT 30'; $requete=mysql_query($selection) or die('Erreur dans le fichier '.__FILE__.' à la ligne '.__LINE__.' '.mysql_error()); $resultat=mysql_num_rows($requete); /*writeReq($selection); writeReq($resultat);*/ if($resultat == 0) { usleep(50000); continue; } $_SESSION['resultat']=$resultat; while($message=mysql_fetch_assoc($requete)) { $texte .= $message['id'].'->'.htmlspecialchars($message['pseudo']).':'. htmlspecialchars($message['date']). htmlspecialchars($message['texte']).'<br>'; } break; } echo '----------------------------<br>'; echo $texte; ?>
Alors j'ai une question...
Comment faire la distinction entre nouveau message et ancien message?
Pck, bêtement, j'ai essayé ceci.
Chaque message envoyé sur le tchat, reçois l'attribut non lu.
Lorsque celui-ci est rapatrié via le refreshChat, le script php, met l'attribut non lu en lu.
Cependant, le message ne s'affiche quasiment jamais sur les autres navigateurs.
Et quand, dans mon script, qui récupère les message, je ne met pas de critère , je demande juste les 30 derniers messages... il me renvoie en boucle les 30 derniers messages......
Comment est ce que je peux faire, pour être sur et certains que chaque message s'affiche, et pas en boucle.
Comment faire la distinction entre nouveau message et ancien message?
Pck, bêtement, j'ai essayé ceci.
Chaque message envoyé sur le tchat, reçois l'attribut non lu.
Lorsque celui-ci est rapatrié via le refreshChat, le script php, met l'attribut non lu en lu.
Cependant, le message ne s'affiche quasiment jamais sur les autres navigateurs.
Et quand, dans mon script, qui récupère les message, je ne met pas de critère , je demande juste les 30 derniers messages... il me renvoie en boucle les 30 derniers messages......
Comment est ce que je peux faire, pour être sur et certains que chaque message s'affiche, et pas en boucle.