Ajax: Ma fonction se répète indéfiniment...
Résolu
WebLooser
Messages postés
63
Date d'inscription
Statut
Membre
Dernière intervention
-
WebLooser Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
WebLooser Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je ne comprends pas pourquoi la fonction getMessages se répète indéfiniment. (le dernier message se répète à l'infini !)
Je vous donne tout les codes.
chat.php:
tchat.js:
tchatAjax.php:
Si vous pensez que celà est normal qui se répète indéfiniment, pourriez-vous me dire pour qu'il ne s'affiche qu'un seule fois s'il vous plaît ?
Merci de votre aide.
Je ne comprends pas pourquoi la fonction getMessages se répète indéfiniment. (le dernier message se répète à l'infini !)
Je vous donne tout les codes.
chat.php:
<?php session_start(); if(!isset($_SESSION['login']) || empty($_SESSION['login'])){ header("location:../../index.html"); } include "connect.php"; ?> <html> <head> <title>NetDead~Tchat en ligne</title> <link rel="stylesheet" href="design.css" /> <script type="text/javascript" src="Jquery.js"></script> <script type="text/javascript" src="heure.js"></script> <script type="text/javascript" src="tchat.js"></script> <script type="text/javascript"> <?php $sql = "SELECT id FROM messages ORDER BY id DESC LIMIT 1"; $req = mysql_query($sql) or die(mysql_error()); $data=mysql_fetch_assoc($req); ?> var lastid = <?php echo $data["id"]; ?> </script> </head> <body> <div id="Header"> <p><h2>Heure locale du serveur: <span id="date_heure"></span><script type="text/javascript">window.onload = date_heure('date_heure');</script></h2></p> </div> <div id="tchat"> <?php $sql = "SELECT * FROM messages ORDER BY id DESC LIMIT 12"; //On récupère les 15 derniers messages dans la table Messages de la DataBase. $req = mysql_query($sql) or die(mysql_error()); $d = array(); while($data = mysql_fetch_assoc($req)){ $d[] = $data; } for($i = count($d)-1;$i>=0;$i--) { ?> <p><strong>[<?php echo $d[$i]["date"]; ?>]<?php echo htmlspecialchars($d[$i]["pseudo"]); ?></strong> : <?php echo htmlspecialchars($d[$i]["message"]); ?></p> <?php } ?> </div> </body> <div id="tchatForm" style="postion:fixed; bottom:0;width:100%;"> <div align="center"> <form method="post" action="#"> <div style="margin-right: 110px; postion:fixed; bottom:0px; left: 0px; right: 0px;"> <textarea name="message" style="width:100%;height:13%" maxlength="150" placeholder="Votre message..."></textarea> </div> <div style="position: absolute;bottom: 45px; right: 40px;"> <input type="submit" value="Envoyer"> </div> </form> </div> </body> </html>
tchat.js:
var url="tchatAjax.php"; var lastid=0; var timer = setInterval(getMessages,5000); $(function(){ $("#tchatForm form").submit(function(){ var message = $("#tchatForm form textarea").val(); $.post(url,{action:"addMessage",message:message},function(data){ if(data.erreur=="ok"){ alert("ok"); } else{ alert(data.erreur); } },"json"); return false; }) }); function getMessages(){ $.post(url,{action:"getMessages",lastid:lastid},function(data){ if(data.erreur=="ok"){ $("#tchat").append(data.result) } else{ alert(data.erreur); } },"json"); return false; }
tchatAjax.php:
<?php session_start(); require("connect.php"); $d =array(); if(!isset($_SESSION['login']) || empty($_SESSION['login']) || !isset($_POST['action'])){ $d["erreur"] = 'Vous devez être connecté(e) pour utiliser le Tchat.'; } else{ extract($_POST); $pseudo = mysql_escape_string($_SESSION['login']); $date = date("H:i"); /** *Fonction AddMessage : *Permet l'ajout d'un message **/ if($_POST['action'] == "addMessage"){ $message = mysql_escape_string($message); $sql = "INSERT INTO messages(pseudo,message,date) VALUES ('$pseudo','$message','$date')"; mysql_query($sql) or die(mysql_error()); $d["erreur"]="ok"; } /** *Fonction getMessage : *Permet l'affichage des derniers messages. **/ if($_POST['action'] == "getMessages"){ $lastid = floor($lastid); $sql = "SELECT * FROM messages WHERE id>$lastid ORDER BY id ASC"; $req = mysql_query($sql) or die(mysql_error()); $d["result"] = ""; while ($data = mysql_fetch_assoc($req)) { $d["result"] .= '<p><strong>['.$data["date"].']'.$data["pseudo"].'</strong> : '.htmlspecialchars($data["message"]).'</p>'; } $d["erreur"]="ok"; } } echo json_encode($d); ?>
Si vous pensez que celà est normal qui se répète indéfiniment, pourriez-vous me dire pour qu'il ne s'affiche qu'un seule fois s'il vous plaît ?
Merci de votre aide.
A voir également:
- Ajax: Ma fonction se répète indéfiniment...
- Problème ajax ✓ - Forum Webmastering
- Erreur ajax c est quoi ✓ - Forum PHP
- Easyphp ajax ✓ - Forum PHP
- Ajax ne fonctionne pas... ? - Forum Programmation
- Le technologie AJAX ✓ - Forum Réseaux sociaux
5 réponses
Tu récupérais mal ton last id
if($_POST['action'] == "getMessages"){ //$lastid = floor($lastid); ou se trouve $lastid ??? Dans le $_POST ;) $lastid = floor($_POST["lastid"]); $sql = "SELECT * FROM messages WHERE id>$lastid ORDER BY id ASC"; $req = mysql_query($sql) or die(mysql_error()); $d["result"] = ""; while ($data = mysql_fetch_assoc($req)) { $d["result"] .= '<p><strong>['.$data["date"].']'.$data["pseudo"].'</strong> : '.htmlspecialchars($data["message"]).'</p>'; } $d["erreur"]="ok"; }
Bonjour/ bonsoir Gilbert,
Tout d'abord, merci pour avoir répondu.
Je récupère (et je récupérais) bien le dernier message. Cependant le gros soucis c'est qu'il s'affiche indéfiniment... (pas dans la base de données). Je pense que l'erreur est dans Tchat.js mais je ne sais pas où...
PS: La fonction qui permet d'obtenir les derniers messages se nomme getMessages.
Tout d'abord, merci pour avoir répondu.
Je récupère (et je récupérais) bien le dernier message. Cependant le gros soucis c'est qu'il s'affiche indéfiniment... (pas dans la base de données). Je pense que l'erreur est dans Tchat.js mais je ne sais pas où...
PS: La fonction qui permet d'obtenir les derniers messages se nomme getMessages.
Ma fonction JS est censé faire apparaître un nouveau message s'il y en a un. Mais à chaque fois qu'il y a un nouveau message le dernier message s'affiche indéfiniment. Faut-il que le lastid (sur chat.php) se recharge chaque seconde ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Dans le extract($_POST) pour ne pas avoir à récupérer toutes les données une par une ! ;P