Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/08/2011, 17h47   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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 :
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 19h42   #2
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
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!
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 19h46   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 20h41   #4
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bon, résolu en passant async à false.
Merci.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 10h00   #5
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
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 :
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.
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 10h14   #6
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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 :
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 10h20   #7
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
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.
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 10h24   #8
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Exact ! j'en suis arrivé à la même conclusion que toi, et j'ai finalement opté pour la modif du async.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h03.


 
 
 
 
Partenaires

Hébergement Web