Was Sie erwarten, ist die synchrone (Blockierung) Typ Anfrage.
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);
Requests sind asynchrone (nicht blockierende) durch Standard was bedeutet, dass der Browser wartet, nicht für sie, um seine Arbeit fortzusetzen abgeschlossen werden. Deshalb hat Ihre Warnung ein falsches Ergebnis erhalten.
Jetzt, mit jQuery.ajax
können Sie optional die Anforderung gesetzt Synchron zu sein, was bedeutet, dass das Skript nur nach die Anfrage weiter laufen, abgeschlossen ist.
Der EMPFOHLEN Weg ist jedoch zu refactor Ihr Code so, dass die Daten an eine Funktion Rückruf geben werden würden, sobald die Anfrage abgeschlossen ist. Dies wird bevorzugt, da die Ausführung von Sperren das Blockieren der UI bedeutet, was nicht akzeptabel ist. Tun Sie es auf diese Weise:
$.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
// ...
Asynchronous Programmierung ist etwas kompliziert weil die Folge von einer Anforderung statt in einer Funktion gekapselt ist die Anforderung Anweisung zu folgen. Aber das Echtzeitverhalten, dass die Benutzererfahrungen deutlich besser sein können, weil sie nicht ein träge Server oder träge Netzwerk sehen bewirken, dass der Browser handeln, als ob es abgestürzt war. Synchron Programmierung ist respektlos und sollte nicht in Anwendungen verwendet werden, die von Menschen verwendet werden.
Douglas Crockford(YUI Blog)
Siehe http://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform-a-synchronous-rather-than-asynchronous-ajax-req –