Ce que vous attendez est la demande de type synchrone (blocage).
var it_works = false;
jQuery.ajax({
type: "POST",
url: 'some_file.php',
success: function (data) {
it_works = true;
},
async: false // <- this turns it into synchronous
});
// Execution is BLOCKED until request finishes.
// it_works is available
alert(it_works);
Les demandes sont asynchrones (non bloquant) par défaut ce qui signifie que le navigateur ne sera pas les attendre à remplir afin de poursuivre ses travaux. C'est pourquoi votre alerte a obtenu un mauvais résultat.
Maintenant, avec jQuery.ajax
vous pouvez également définir la demande d'être synchrone, ce qui signifie que le script ne continuera à fonctionner après la demande est terminée.
Le RECOMMANDÉ façon, cependant, est de refactor votre code afin que les données seraient transmises à une fonction de rappel dès que la demande est terminée. Ceci est préférable car bloquer l'exécution signifie bloquer l'interface utilisateur, ce qui est inacceptable. Faites-le de cette façon:
$.post("some_file.php", '', function(data) {
iDependOnMyParameter(data);
});
function iDependOnMyParameter(param) {
// You should do your work here that depends on the result of the request!
alert(param)
}
// All code here should be INDEPENDENT of the result of your AJAX request
// ...
Programmation asynchrone est un peu plus compliquée parce que la conséquence de faire une demande est encapsulé dans une fonction au lieu de suivre l'instruction de la demande. Mais le comportement en temps réel que les expériences utilisateur peuvent être considérablement mieux parce qu'ils ne voient pas d'un serveur lent ou d'un réseau lent que le navigateur d'agir comme si elle avait écrasé. La programmation synchrone est irrespectueuse et ne doit pas être utilisée dans les applications qui sont utilisées par des personnes.
Douglas Crockford(YUI Blog)
Voir http://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform-a-synchronous-rather-than-asynchronous-ajax-req –