J'ai un problème. La fonction ci-dessous fonctionne à 100%, mais l'instruction if
qui appelle la fonction se résout avant que la fonction renvoie son résultat!JavaScript continue avant la fin de la fonction !? Ajax confusion asynchrone et solution
L'alerte pour "test2" montrera AVANT l'alerte avec le résultat "+". Quelle est la raison?
(le problème qu'il résout toujours à faux, peu importe ce que parce que rien ne retourne même quand quelque chose va être de retour!)
function checkUsername (username) {
$.post("ajax_messages.php",{
func: "checkUsername",
username: username
}, function(data){
alert("result: "+data);
return data;
});
}
$('.send').click(function() {
if (checkUsername($receiverBox.val()) == "true") {
alert("test");
return false;
} else {
alert("test2");
return false;
}
});
Edit:
Merci pour les réponses rapides. J'ai essayé ce qui suit:
$.ajaxSetup({
async:false
});
Édition2: Mais cela n'a pas non plus agi comme prévu. Comme un ensemble normal de fonctions serait donc je devrais agir. Donc, je vais essayer quelques-unes des méthodes ci-dessous
Édition3: Succès! C'est parfait. Un peu maladroit mais beaucoup plus lisse que toute autre méthode que j'ai pu trouver. J'espère que cela aide
var checkUsernameResult = false;
function checkErrorCheckingIsComplete() {
if (checkUsernameResult != false) {
alert(checkUsernameResult);
}
}
function checkUsername (username) {
$.post("ajax_messages.php",{
func: "checkUsername",
username: username
}, function(data){
alert("result: "+data);
checkUsernameResult = data; // each check has one of these
checkErrorCheckingIsComplete(); // all checks have this as the end
});
}
$('.send', $message_box).click(function() {
checkUsername($receiverBox.val());
//more checks here
return false;
});
J'ai changé de chanson, bonne idée! Je vais essayer tout de suite – Dorjan
WOW, cela a fonctionné étonnamment – Dorjan
Pour ceux qui lisent cela dans le futur, lisez le edit3 dans ma question et il vous expliquera. Merci pour l'idée digiguru – Dorjan