Variable globale Ajax
Résolu
sispheor
-
jojo673 Messages postés 210 Date d'inscription Statut Membre Dernière intervention -
jojo673 Messages postés 210 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis débutant en javascript et je rencontre un petit souci pour affecter une variable dans une fonction ajax. J'explique le but de la fonction. Je vérifie en temps réel l'existence ou non du login saisi par l'utilisateur. La fonction renvoi faux dans le cas ou le login fait moins de 4 caractères ou si il est présent dans la base. Et renvoie vrai sinon. L'ajax fonctionne tres bien c'est juste que je veux affecter à la variable globale "reponse" la valeur "true" ou "false" suivant la le retour de l'ajax mais hélas cela ne fonctionne pas. En effet la valeur de retour de ma fonction check[login] est toujours la valeur que j'ai initialisé.
Help me plz les dev!
je suis débutant en javascript et je rencontre un petit souci pour affecter une variable dans une fonction ajax. J'explique le but de la fonction. Je vérifie en temps réel l'existence ou non du login saisi par l'utilisateur. La fonction renvoi faux dans le cas ou le login fait moins de 4 caractères ou si il est présent dans la base. Et renvoie vrai sinon. L'ajax fonctionne tres bien c'est juste que je veux affecter à la variable globale "reponse" la valeur "true" ou "false" suivant la le retour de l'ajax mais hélas cela ne fonctionne pas. En effet la valeur de retour de ma fonction check[login] est toujours la valeur que j'ai initialisé.
Help me plz les dev!
check['login'] = function() { var retour = false; //par defaut on envoi faux (le retour de la fonction prend tjs cette valeur. Si ici je met true la fonction renvera true) var login = document.getElementById('login'); var valuelogin = document.getElementById('login').value; //on recup le login var tooltipStyle = getTooltip(login).style; //onrecup le css var tooltip2 = getTooltip2(login).style; if (valuelogin ==""){ //si rien dans la case login.className = 'login'; //on rez la couleur à bleu } if (valuelogin.length < 4){//si pseudo trop court tooltipStyle.display = 'none'; //on efface le premier tooltip login.className = 'incorrect'; tooltip2.display = 'inline-block'; return false; }else { tooltip2.display = 'none'; //on efface le tooltip pseudo trop court $.ajax({ // fonction permettant de faire de l'ajax type: "POST", url: "dispologin.php", data: "valuelogin="+valuelogin, success: function(msg){ if(msg==0) // si le pseudo est dispo { login.className = 'correct'; tooltipStyle.display = 'none'; retour= true; //ici ça marche pas } if(msg==1) // pseudo pas dispo { login.className = 'incorrect'; tooltipStyle.display = 'inline-block'; retour= false; //marche pas } } }); return retour; //renvoi tjs la valeur initialisée en haut } };
A voir également:
- Javascript variable globale
- Telecharger javascript - Télécharger - Langages
- Javascript void 0 c'est quoi ✓ - Forum Réseaux sociaux
- Variable d'environnement temp - Forum Word
- Javascript echo ✓ - Forum PHP
- Vba range avec variable ✓ - Forum VB / VBA
11 réponses
Merci pour cette premiere réponse. Comme je l'ai expliqué la fonction ajax fonctionne et la page PHP me renvoi bien 1 ou zéro. Le problème est uniquement sur l'affectation de la variable réponse. Mais voici le code quand même!
//dispologin.php <?php $link = mysql_connect("localhost", "root", "p@ssw0rd") or die("Impossible de se connecter : " . mysql_error()); mysql_select_db("FTP"); // VERIFICATION $result = mysql_query("SELECT nomuser FROM USERS WHERE nomuser='$_POST[valuelogin]'"); if(mysql_num_rows($result)==0){ //pas de ligne donc pseudo inexistant dans la base echo "0"; } else{ //sinon si il y a une ligne dans la reponse echo "1"; } ?>
Et bien. J'avais remarqué que dans une fonction ajax je ne pouvais pas faire de alert(). Il n'affiche jamais rien. En revanche je sais que la fonction rentre bien dans l'une des boucles car les "if" modifient le CSS avec login.classname. Et cela fonctionne parfaitement à ce niveau là. Il y a juste le réponse = true ou false qui n'est pas prit en compte....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai dis une bétise. Le alert (msg) fonctionne tres bien dans la fonction ajax! Et affiche bien 0 quand le pseudo est dispo. Mais reponse reste à sa valeur initialisé et donc false.
Peut-être que le problème viens du fait que toute la fonction est exécuter avant que l'AJAX n'est eu le temps de s'exécuter, c'est à dire la variable retour contient false au début, toute la fonction est parcourut, on arrive à l'ajax qui commence l'execution, on arrive au return retour; et une fois l'ajax terminé il enregistre la valeur retourné dans la variable retour.
Je ne connais pas très bien cette méthode pour utiliser l'ajax, mais je sais que normalement on peut dire que quand l'ajax c'est terminé, alors on retourne la valeur.
Je ne connais pas très bien cette méthode pour utiliser l'ajax, mais je sais que normalement on peut dire que quand l'ajax c'est terminé, alors on retourne la valeur.
Bonjour
Je n'y connais pas grand chose en ajax, mais il me semble que la variable retour est locale dans la fonction check['login'] alors qu'elle est globale dans la fonction function(msg){. Il ne s'agit donc pas de la même variable.
Remplace
Je n'y connais pas grand chose en ajax, mais il me semble que la variable retour est locale dans la fonction check['login'] alors qu'elle est globale dans la fonction function(msg){. Il ne s'agit donc pas de la même variable.
Remplace
var retour = false; //par defaut ..par
retour = false; //par defaut
Non ce n'est pas ça. Mais merci pour cette réponse. C'est jojo qui a raison. Avec différent alert je viens de me rendre compte que la fonction se termine avant l'ajax. Il faut donc que je trouve le moyen d'attendre que le ajax réponde avant que la fonction renvoi la réponse. Pour info jojo j'utilise un plugin jquery pour faire de l'ajax.
C'est vrai qu'il ne suffit pas de rendre 'retour' globale pour que ça marche, si ton ajax est exécuté en asynchrone. Mais je crois quand même que ma remarque sur le fait que tu as deux variables retour différentes, une locale et l'autre globale, reste valable. À vérifier quand tu auras trouvé le moyen d'attendre la réponse d'ajax.
C'est bon ça marche!Le père à raison il faut passer le async en false (par défaut il est en true). Du coup la fonction attend la réponse et tout roule.
Cependant jojo a raison également la navigation est bloquée le temps de la requête. Il vaut mieux ne pas avoir une grosse base de données à consulter.
En gros il fallait lire ce $ù%*^£ de manuel!! RTFM quoi.
Merci beaucoup pour vos réponses!!!
Cependant jojo a raison également la navigation est bloquée le temps de la requête. Il vaut mieux ne pas avoir une grosse base de données à consulter.
En gros il fallait lire ce $ù%*^£ de manuel!! RTFM quoi.
Merci beaucoup pour vos réponses!!!