Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème : boucle de setTimeout

[AJAX]

Sujet résolu
    30 juillet 2009 à 17:05:55

    Bonjours,
    je suis en train de faire un tchat et afin de prévenir les nouveaux message j'ai fait une fonction :
    var dure = 5000 ;//valeur d attente
    function message_check()
    {
    
    setTimeout("request('readData','recevoir')",dure);
    // après <italique>dure</italique>ms appelle la fonction request('readData','recevoir')
    
    }
    


    request('readData','recevoir') va me permettre d'obtenir les nouveaux messages

    En théorie : message_check se lance...attend 5 sec puis demande les nouveaux messages puis se relance....
    En pratique : la première fois il attend 5 sec puis après c'est instantané : en gros
    on attend 1,2,3,4,5 sa vérifie puis c'est quazi instantané (équivaudrait a un setTimeOut où dure serait égal a 0
    J'aimerais donc faire en sorte que le setTimeOut ne se "dérègle" pas...
    Je comprend pas comment sa se fait
    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      30 juillet 2009 à 17:13:17

      Tu peux nous montrer ta fonction request("readDate", "recevoir") et comment tu appelles message_check() ?
      • Partager sur Facebook
      • Partager sur Twitter
        30 juillet 2009 à 17:14:43

        Même un peu plus :
        function getXMLHttpRequest() {
        	var xhr = null;
        	
        	if (window.XMLHttpRequest || window.ActiveXObject) {
        		if (window.ActiveXObject) {
        			try {
        				xhr = new ActiveXObject("Msxml2.XMLHTTP");
        			} catch(e) {
        				xhr = new ActiveXObject("Microsoft.XMLHTTP");
        			}
        		} else {
        			xhr = new XMLHttpRequest(); 
        		}
        	} else {
        		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
        		return null;
        	}
        	
        	return xhr;
        }
        
        function request(callback,ordre) {
        	var xhr = getXMLHttpRequest();
        
        	xhr.onreadystatechange = function() {
        		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
        			callback(xhr.responseText);
        		}
        	};
        	
        	xhr.open("GET", "JS-php.php?ordre="+ordre+"&Pseudo="+pseudo+"&Message="+message, true);
        	xhr.send(null);
        }
        
        function readData(oData) {
        	if(oData!=LastMessage)
        	{
        	alert(oData);
        	LastMessage =oData;
        	}
        }
        


        En gros c'est pas encore un tchat juste ta :
        -le champ de selection du texte
        -le bouton envoyé
        -le bouton recevoir
        quand tu clique sur recevoir sa affiche le dernier message
        Je veux que quelque chose de spécial ce passe lorsqu'il y a un nouveau message.
        Le dernier message lu est stocké dans LastMessage.
        Pour l'instant sa devrait regarder juste si if(oData!=LastMessage) dans lequel cas sa affiche le message
        Mais avec ce bug sa marche meme pas....
        On pourrait croire que vu que c'est instantané sa marche mieux (quitte a faire ramer) mais même pas...
        • Partager sur Facebook
        • Partager sur Twitter
          30 juillet 2009 à 17:21:16

          Essaie ça à tout hasard
          dure = 5000 ;//valeur d attente
          function message_check()
          {
          request('readData','recevoir');
          setTimeout("message_check()",dure);
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            30 juillet 2009 à 17:28:18

            Merci beaucoup !
            c'est ça !
            :)

            • Partager sur Facebook
            • Partager sur Twitter

            Problème : boucle de setTimeout

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown