J'ai une instruction if:JavaScript si (function_foo()) n'attend pas function_foo() pour terminer
if(authenticate_session("secret_password12345")){
alert("You are authenticated");
}else{
alert("Intruder alert!");
}
et le javascript fonction d'authentification, ce qui en fait un appel AJAX jQuery POST au serveur faire l'authentification réelle, et renvoie true ou false:
function authenticate_session(session_id){
$.post("/auth.php",
{ action: "authenticate_session", login_id: session_id },
function(data){
if(data == "denied"){
alert("denied");
return false;
}else if(data == "accepted"){
alert("accepted");
return true;
}
},
"text");
}
Toutefois, lorsque l'instruction if invoque la fonction athentication, il ne l'attend pas AJAX pour terminer, et exécute toujours le « autre ». Si j'ajoute "return true" dans la première ligne de la fonction d'authentification, avant l'ajax, l'instruction if fonctionne comme attendu => alert ("Vous êtes authentifié").
Je sais que le côté serveur fonctionne correctement, car l'alerte ("denied") et l'alerte ("accepted") sont appelées comme prévu (mais de façon intéressante, après les alertes d'instruction if).
Comment faire pour que mon instruction if attende jusqu'à ce que la fonction d'authentification soit terminée?
Merci!
Cette réponse semble bonne, mais régler les choses pour qu'elles soient synchrones n'a pas résolu le problème. Odd hein? – doctororange
Ceci, en conjonction avec ma réponse, était le billet. – doctororange
Vous ne devez jamais effectuer d'appels synchrones à partir du navigateur. Exposer la fonctionnalité synchrone quand XHR est utilisé dans le navigateur était la plus grande erreur dans la conception de ce composant. – NickFitz