IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

SetTimeout interminable ajax


Sujet :

jQuery

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut SetTimeout interminable ajax
    Hello, petit problème avec mon code qui convulse quand je clique 2 fois :p

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var timer;
    function rafraichirmsg(desti){
        clearTimeout(timer);
            $.ajax({
        type: 'POST',
        url: 'chatmsg.php',
        data: {desti: desti},
        success: function(b) {
        timer = setTimeout(rafraichirmsg(desti), 5000);
        $('#messages').html(b);}
    });
    }

    Alors, c'est très simple, le rafraichirmsg(desti) est déclenché au onClick, je clique sur un desti(nataire) (1 fois) ça fonctionne, mais en cliquant sur un autre desti (une 2ème fois) ça blink entre les messages de desti1 et desti2. Donc la fonction ne clear pas le settimeout parce que c'est comme s'ils s'additionnaient...

    Help please

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 98
    Par défaut
    il faut enlever le var devant le timer de la fonction rafraichirmsg

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Merci, mais j'ai déjà essayé sans "var" ça donne la même chose :/

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 98
    Par défaut
    c'est sans doute une question de porté de la variable timer.
    Sans le var dans ta fonction ca me semble juste en javascript.
    Maintenant en jquery je ne sais pas.

    Bon courage,

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Ah ok merci :/ je cherche toujours, en fait ceci ne fonctionne pas plus :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function cleartimer(){
    	clearTimeout(timer);
    }

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    La déclaration de timer est juste. Déclarée au niveau global, une variable sera toujours globale, avec ou sans var. Mais la bonne pratique est de toujours utiliser var. Voir portée des variables.

    En réalité, le problème est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timer = setTimeout(rafraichirmsg(desti), 5000);
    setTimeout attend comme premier paramètre une référence à une fonction. Là tu lui passes le résultat de l'appel à rafraichirmsg(desti), donc en fait il se passe deux choses :
    • rafraichirmsg est appelée immédiatement, et pas 5 secondes après ;
    • setTimeout reçoit undefined et donc ne fait rien.


    Pour réussir à passer rafraichirmsg à setTimeout tout en gardant le paramètre desti, il faut utiliser une fonction anonyme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timer = setTimeout(function(){ rafraichirmsg(desti); }, 5000);
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Merci infiniment ^^

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Petit soucis :
    [Error] ReferenceError: Can't find variable: d
    (anonymous function)
    Avec le code ci-dessous, alors que j'appelle la fonction seulement avec rafraichirmsg('general') !
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function rafraichirmsg(destina){
    	desti = destina;
    	clearTimeout(timerrefresh);
            $.ajax({
    	type: 'POST',
    	url: 'chatmsg.php',
    	data: {d: destina},
    	success: function(b) {
    		if(destina!='conx'){
    			timerrefresh = setTimeout(function(){ rafraichirmsg(destina); }, 3000);
    		}
    		$('#messages').html(b);
    	}
    });
    }

    Ya un autre problème, c'est qu'avant "destina" c'était "d" mais j'ai changé, cependant j'ai toujours une erreur sur "d" :O

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    essaye
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Ça me paraît bizarre cette histoire de d. J'ai plutôt l'impression qu'il y a une histoire de cache ou de version. To175, tu codes avec quel éditeur ? Et tu débogues avec quel navigateur ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  12. #12
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Par défaut
    Désolé c'est un "d" qui s'était glissé dans une autre fonction

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Refresh d'une div en ajax sans .load ni setTimeOut
    Par adrienanorm dans le forum jQuery
    Réponses: 6
    Dernier message: 05/11/2011, 09h20
  2. [AJAX] - Rafraichissement d'un DIV avec setTimeOut
    Par Seb06 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/03/2011, 00h07
  3. onLoad=setTimeout et ajax
    Par bob633 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 03/03/2011, 20h06
  4. Delai (setTimeout) dans un toggle() rempli d'ajax
    Par franquis dans le forum jQuery
    Réponses: 1
    Dernier message: 07/10/2010, 15h48
  5. Ajax et settimeout
    Par tpdm dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 18/10/2008, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo