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 :

La mauvaise récupération de variables dans une fonction


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut La mauvaise récupération de variables dans une fonction
    Bonsoir,

    J'exécute plusieurs fonctions, la première fonction récupère la liste des derniers messages et la deuxième fonction récupère les derniers messages d'un seul utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $( "body" ).on( "click", "#miss", function(){
    	if(timermsg !='') clearTimeout(timermsg); timermsg='';
    	refreshlistmsg();
    });
    La fonction pour la liste de messages d'un seul utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function refreshmsg(titi){														
    	jQuery.ajax({
    		type: 'POST', 
    		url:  'controllers/accueil/msg.php', 
    		dataType : 'json',
    		data: { id: titi },
    		success: function(json) {												
    			var xxx  = JSON.stringify(json);																	
    			var obj    = eval('(' + xxx + ')');
     
    			var msgajx = '';
    			for( var x in obj ) {
    				var ligne = obj[x];
    				msgajx += ligne.de;
    			}
    			$('#msgajax').html(msgajx);																
    		} 
    	});
    	timer = setTimeout("refreshmsg(titi)", 20000);
    }
    La fonction pour la liste des messages, qui fera appel à la fonction liste des messages d'un utilisateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function refreshlistmsg(){
    	jQuery.ajax({
    		type: 'POST', 
    		url:  'controllers/accueil/messages.php', 
    		dataType : 'json',
    		success: function(jsonn) {															
    			var zzz     = JSON.stringify(jsonn);														
    			var objj    = eval('(' + zzz + ')');
    			var msgajax = '';
    			for( var z in objj ) {				
    				var ligne = objj[z];
                                    titi = ligne.de
    				alert(titi);
                                    id = msg + ligne.de;
     
    				$( "body" ).on( "click", "#"+id, function(){
     
    					if(timer !='') clearTimeout(timer); timer='';
    					alert(titi);
    					refreshmsg(titi);
    				});											
    			}														
    		} 
    	})
    	timermsg = setTimeout("refreshlistmsg()", 20000);	
    }
    Le soucis est le suivant:

    Quand je fais le premier clique sur #miss, la fonction refreshlistmsg() s'exécute et l'alert(titi) de la ligne 13 m'affiche bien les IDs voulu 5 4 1 2, mais le deuxième clique de la ligne 16 fait l'alert(titi) de la ligne 18 m'affiche 2 2 2 2 c.a.d quatre fois le dernier ID du premier alert(titi)

    Comment je peux faire pour avoir les mêmes IDs du le premier alert dans le deuxième alert ?
    Et aussi comment faire pour que le deuxième alert ne s'exécute qu'une seule fois lord du clique de la ligne 16 ?

    Bonsoir :-)

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    success: function(json) {
    	var xxx  = JSON.stringify(json);							
    	var obj    = eval('(' + xxx + ')');
    j'ai du mal à comprendre à quoi cela sert ???

    Tu pourrais également utiliser la méthode each.

    Pour en revenir à ton problème, pose toi la question de ce que vaut titi au moment de l’exécution de la fonction.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    ça sert a récupérer les valeurs du tableau renvoyé en ajax depuis messages.php --> bdd

    j'ai essayé de l'initialiser par :


    mais j'ai toujours la même réponse

  4. #4
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    heu le retour est un json ....
    si tant est que le serveur renvoie bien un string json correctement formaté
    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 !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    voici le code de messages.php

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    header('Content-Type: application/json; charset=UTF-8'); 
    $message = array();
    include 'dd.php';
    $sqlmsg = "SELECT id,message FROM message";
    $reqmsg = mysqli_query($db, $sqlmsg);
    $nbrmsg = mysqli_num_rows($reqmsg);
     
    while($lig = mysqli_fetch_assoc($reqmsg)){
    	$message[] = array(
                    'id'      => $lig['id_compte'],
                    'lut'     => $lig['lut']
            );
    }
    echo json_encode($message);

  6. #6
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    donc le json en retour serait correct.

    ren ne sert alors de stringifier et d'évaluer car le dataType json fais en sorte que le retour est directement exploitable en tant que json
    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 !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Le but s'était de récupérer les valeurs une par une du tableau json, c'est une solution que j'ai trouvé sur le net, si c'est pas bon, je fais quoi a la place ?

  8. #8
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Certes ...
    Mais ce que je te dis, c'est que tu récupères directement un JSON
    pourquoi vouloir le stringifier puis l'evaluer .... ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    success: function(json) {
     console.log(json);
    }
    et regarde dans la console !
    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 !

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Ça recupere bien tout le tableau des objets, mais c'est pas la le problème,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function refreshlistmsg(){
    	jQuery.ajax({
    		type: 'POST', 
    		url:  'controllers/accueil/messages.php', 
    		dataType : 'json',
    		success: function(jsonn) {															
    			var zzz     = JSON.stringify(jsonn);														
    			var objj    = eval('(' + zzz + ')');
    			var msgajax = '';
    			for( var z in objj ) {				
    				var ligne = objj[z];
     
                                    id = ligne.de;
                                    i++;											
    			}
                            alert(id);														
    		} 
    	})
    }
    var i=0;
    var id = new array();

    l'alert m'affiche ceci ,,,2 (le 2 étant le dernier id récupérer) alors qu'il fallait que ça soit 5,3,4,2

    Merci :-)

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    de la bonne utilisation d'un Array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var z,
        ligne,
        tab = []; // déclaration d'un tableau vide
     
    for ( z in objj) {
      ligne = objj[z];
      tab.push( ligne.de);  // ajout de l'élément
      i++;
    }
    alert( tab);

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

Discussions similaires

  1. Récupération de variable dans une fonction
    Par KDZCrew dans le forum Langage
    Réponses: 5
    Dernier message: 10/11/2010, 11h22
  2. Réponses: 6
    Dernier message: 30/04/2009, 11h03
  3. [Tableaux] Récuperer variable dans une fonction
    Par amarcil dans le forum Langage
    Réponses: 12
    Dernier message: 12/02/2006, 10h56
  4. Pb de variable dans une fonction :
    Par soad029 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/10/2005, 13h54
  5. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 12h50

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