Bonsoir à vous tous amis développeurs ^^
Alors, voila le problème:
J'ai décidé de créer un petit système de chat pour un site quelconque, c'est la première fois que j'utilise vraiment de l'Ajax et j'ai donc bien trimé pour déja en arriver là :
voir l'exemple
Comme vous pouvez le constater il marche, mais si vous consultez la console d'erreur, vous verrez que toutes les 5 secondes (fréquence de rafraichissement du chat), une erreur est créée.
si la table des messages est vide :
si elle contient des messages :
Mais je ne la comprends pas, d'autant plus que tout se passe exactement comme je le souhaite...
Voici ma méthode :
Quand le visiteur valide son message, je lance la procédure sendMessage() qui fait appel à un script php incluant le message dans la base de données.(jusque là tout va bien)
Au chargement de la page je lance la procédure qui récupère les messages dans la base de données toutes les 5 sec grâce à un autre script php :
1 2 3 4 5 6
| function getChatData() {
getXHR.onreadystatechange = getStatusChecker;
getXHR.open('GET','chat/getMsg.php',true);
getXHR.send(null);
setTimeout(getChatData, 5000);
} |
voici
getMsg.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
header("Expires: Sat, 05 Nov 2005 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-Type: text/xml; charset=UTF-8");
require_once("conf.php");
$sql->query("SELECT * FROM chat");
include_once("response.php");
?> |
il fait appel à response.php qui met en forme et renvoie le résultat de la requete sql.
response.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?php
$reponse='';
$bool=0;
while ($row=$sql->fetch_row())
{
$msg = $row['msg'];
$name = $row['name'];
$date = $row['date'];
$msg = htmlspecialchars($msg);
$name = htmlspecialchars($name);
$date= date('\[d\/m\]H\:i',$date);
if($bool)$bool=0;
else $bool=1;
$reponse .='<div class="post'.$bool.'"><span class="date">'.$date.'</span> : <span class="name">'.$name.'</span><br /><span class="msg">'.$msg.'</span></div>';
}
echo $reponse;
?> |
Quand les données sont arrivées je les inscris simplement dans ma div citée plus haut grace à innerHTML du div.
Voila n'hésitez pas à me demander des précisions sur le code,
en espérant que quelqu'un comprenne ce qui m'arrive, merci d'avance ^^
Partager