die Frage ist ziemlich einfach und technisch:
var it_works = false;
$.post("some_file.php", '', function(data) {
it_works = true;
});
alert(it_works); # false (yes, that 'alert' has to be here and not inside $.post itself)
Was ich erreichen möchte, ist:
alert(it_works); # true
Gibt es eine Möglichkeit, das zu tun? Wenn nicht, kann $.post()
einen Wert zurückgeben, der auf it_works
Angewendet wird?
AJAX steht für Asynchronous JavaScript und XML. Das Versenden an den Server erfolgt daher nicht synchron mit dem Rest der Funktion. Probieren Sie stattdessen einen Code wie diesen aus (er bricht nur die Kurzform $.post
raus in den längeren $.ajax
aufrufen und die Option async
hinzufügen).
var it_works = false;
$.ajax({
type: 'POST',
async: false,
url: "some_file.php",
data: "",
success: function() {it_works = true;}
});
alert(it_works);
Hoffe das hilft!
Es scheint, dass Ihr Problem einfach eine Nebenläufigkeit ist. Die Post-Funktion verwendet ein Callback-Argument, um Ihnen mitzuteilen, wann der Post beendet wurde. Sie können den Alert im globalen Bereich nicht wie folgt erstellen und erwarten, dass der Post bereits abgeschlossen ist. Sie müssen es in die Rückruffunktion verschieben.
Ihr Code schlägt fehl, weil post()
eine asynchrone Anforderung an den Server startet. Das bedeutet für Sie, dass post()
sofort zurückkehrt und nicht , nachdem die Anforderung abgeschlossen wurde, wie Sie es erwarten.
Was Sie dann brauchen, ist, dass die Anforderung synchron ist und den aktuellen Thread blockiert, bis die Anforderung abgeschlossen ist. Somit,
var it_works = false;
$.ajax({
url: 'some_file.php',
async: false, # makes request synchronous
success: function() {
it_works = true;
}
});
alert(it_works);