Bonjour,
je m'amuse actuellement a coder un chat en AJAX.
Sous firefox, tout fonctionne parfaitement.
Voilà comment j'ai procédé pour coder ce chat :
Un fichier chat.txt qui contient l'historique de la conversation, dont le contenu est demandé par le navigateur client toutes les 3 secondes via une requête AJAX.
Les utilisateurs ajoutent à ce fichier leurs messages.
Cependant, sous IE, lorsque l'utilisateur envoi un message, il modifie bien le fichier chat.txt, mais le problème vient de l'affichage.
En effet, il semblerait qu'IE ne tienne pas compte des modifications du fichier (je veux dire par la qu'il affiche toujours le contenu du fichier au moment du chargement de ma page de chat).
Un peu de code pour y voir plus clair :
Le fichier php qui gère l'historique (pas encore gérer l'effacement des messages trop ancien)
La fonction qui est censé actualiser la fenêtre des messages (appelé toutes les 3 secondes, un alert() me prouve que la fonction est bien appelé) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?php if (isset($_GET['msg'])){ $msg = $_GET['msg']; $file=fopen("chat.txt","a"); fwrite($file, $msg."<br />\n"); fclose($file); } ?>
J'appel cette fonction même si c'est pas très propre de redéfinir a chaques fois la fonction onreadystatechange :s. Modification à venir
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function readFile(){ var messages = "chat.txt"; var xhr = getXHR(); xhr.onreadystatechange = function(){ if(xhr.readyState==4 && xhr.status==200) document.getElementById("messages").innerHTML=xhr.responseText; } xhr.open("GET", messages, true); xhr.send(null); }.
Et enfin l'appel à la fonction toutes les 3 secondes (dans les balises <head> de ma page principale de chat) :
Les messages envoyé via IE modifient bien de manière correct le fichier chat.txt (les modifs apparaissent bien toutes les 3 secondes sous Firefox), je sais plus quoi faire là :/.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <script type="text/javascript"> setInterval("readFile()", 3000); </script>
Petite particularité : lorsque je ferme IE et le réouvre, là il prend en compte les modifs !
Un coup de main serait le bienvenue si jamais quelqu'un a déjà eu ce problème...
Merci d'avance.
Partager