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 :

Portée d'une variable tableau dans une fonction JS


Sujet :

jQuery

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Portée d'une variable tableau dans une fonction JS
    Bonjour à tous,

    Soit une petite fonction pour vérifier un formulaire :

    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
     
    function verif(){
    var err = new Array();
     
    if(leChamp.value == ""){
       err.push("le champ est vide");
    }
    if(leChamp2.value....){err.push()} //etc etc sur divers champs...
     
    //puis une fonction jquery pour interroger un script PHP pour une vérif serveur
     
    	$.ajax({
    	   type:"POST",
    	   url:  "xhr_verif.php",
    	   data: "dos="+dos,
    	   success: function(feedback){
    		   err.push(feedback); alert(feedback); 
    		}
    	});
     
    }
    Le problème c'est que la var "err" ne s'implémente pas dans le jquery, alors que le alert(feedback) fonctionne.
    J'ai essayé this.err ou window.err : pas mieux.
    Pourquoi ?
    Merci de vos lumières.

  2. #2
    Invité
    Invité(e)
    Par défaut
    salut,

    Tu entends quoi par "la var err ne s'implémente pas"? (ce qui ne veut rien dire au passage).

    Normalement tu as accès à la variable err "dans le jquery".
    Quant à window et this, c'est normal, que ca marche pas, tu sors du contexte de la fonction verif si tu fais ca.

    err est attaché (mot clé var) à la fonction verif, donc pas besoin de prefixe devant err, puisqu'on est justement dans la fonction verif!

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonsoir,

    Ne s'implémente pas...ça veut peut-être rien dire, pour moi ça veut dire que bien que le alert(feedback) retourne bien quelque chose, le tableau err ne prend pas la valeur du feedback.

  4. #4
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bon, résolu en passant async à false.
    Merci.

  5. #5
    Invité
    Invité(e)
    Par défaut
    je suis quasi sûr que tu essaie de te servir de err après en dehors du callback success.
    Il n'est pas nécessaire de passer l'async à true, tu perds la puissance de l'asynchrone.

    Si feedback existe bien (avec ton alert), alors err est également mis à jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	$.ajax({
    	   type:"POST",
    	   url:  "xhr_verif.php",
    	   data: "dos="+dos,
    	   success: function(feedback){
    		   err.push(feedback); alert(err); //affiches les erreurs concaténées
    		}
    	});
    Dans success tu mets à jour certaines variables (ici err). Pour te servir de ces variables mises à jour, il faut faire ton traitement dans success.

  6. #6
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonjour,

    Oui, si le tableau err n'est pas vide, je le lis en dehors du callback sucess, mais toujours dans la même fonction "verif":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(err.length > 0){
    	alerte += "Votre formulaire comporte une ou plusieurs erreurs:\n\n";
    	for(var i=0; i<err.length; i++){
    		alerte += err[i];
    	}
    	alert(alerte);
    	return false;
    }
    Et j'ai constaté, avec le async défaut, que les erreurs entrées dans le tableau AVANT le ajax s'affichaient bien, mais pas celles du callback, alors que le alert(feedback), lui, les affiche.

  7. #7
    Invité
    Invité(e)
    Par défaut
    lorsque t'es à la ligne avant ta requête ajax.
    Tu passes à la suivante.
    Tu lances la requête ajax.
    Tu passes à la ligne après la requête ajax. Le serveur n'a pas encore retourné de réponse.
    err n'est pas modifié.
    Ta fonction verif se termine probablement.
    Le serveur retourne la réponse.
    Tu rentres dans le callback.
    err est modifié, mais c'est dead tu as déjà fait le traitement.

    Conclusion : soit tu fais du synchrone cad tu attends le retour du serveur pour passer à la ligne d'après, mais ici, ce n'est pas du tout justifié.

    Soit tu fais toute la logique de le callback du retour du serveur (success). cad : tu lis err dans le callback.

  8. #8
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Exact ! j'en suis arrivé à la même conclusion que toi, et j'ai finalement opté pour la modif du async.

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

Discussions similaires

  1. Copier une variable tableau dans une autre.
    Par Z20500 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/02/2014, 00h05
  2. [PHP 5.0] Problème avec une variable tableau dans une session
    Par diblasio dans le forum Langage
    Réponses: 5
    Dernier message: 23/08/2010, 09h59
  3. Réponses: 9
    Dernier message: 23/06/2009, 10h54
  4. Réponses: 5
    Dernier message: 26/03/2008, 21h48
  5. afficher une variable tableau dans une JSP
    Par johnnywalker dans le forum Struts 1
    Réponses: 11
    Dernier message: 04/03/2007, 22h02

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