Im Gegensatz zu Ihrem Glauben, Ihr Code funktioniert. Aber zu sehen, was Sie versuchen, zwischen den Zeilen zu tun und zu lesen Ich vermute, Sie versuchen, dies zu tun:
var myVariable;
$.ajax({
//stuff....
success:function(data) {
myVariable = data;
}
});
alert(myVariable); // at this point myVariable is undefined!!
Wenn ja, müssen Sie über asynchrone Funktionen lernen.
Grundsätzlich gibt die $.ajax()
Funktion zurück, bevor die Ajax-Anforderung tatsächlich übermittelt wird. Es wird später die Ajax-Anfrage machen, wenn der Browser nicht gerade Javascript ausführt. Dies bedeutet, dass die Zuweisung noch nicht erfolgt ist, wenn Sie versuchen, den Wert myVariable
zu melden.
Lesen Sie meine Antwort hier für mehr Details: JS global variable not being set on first iteration
Die einzige gute Lösung ist es, die Art und Weise Sie Codierung denken zu ändern. (Es gibt eine wohl schlimme Lösung, die darin besteht, den Ajax-Aufruf auf synchron zu stellen, aber wir kommen nicht dazu, Sie können es googlen, wenn Sie das Handbuch lesen oder lesen wollen). Statt dies zu tun:
var myVariable;
$.ajax({
//stuff....
success:function(data) {
myVariable = data;
}
});
/*
* Do lots of stuff with the returned value
* of the myVariable variable
*
*/
Sie brauchen jetzt es so schreiben:
var myVariable;
$.ajax({
//stuff....
success:function(data) {
myVariable = data;
/*
* Do lots of stuff with the returned value
* of the myVariable variable
*
*/
}
});
Grundsätzlich kann jede und alle Codes bewegen, die Sie nach dem Ajax-Aufruf in den Erfolg Rückruf geschrieben hätten. Das ist gewöhnungsbedürftig (ausgehend davon, wie viele Varianten dieser Frage im Internet existieren). Aber wenn man einmal daran gewöhnt ist, wird es zur zweiten Natur.
Es gibt einen Namen für diese Art der Programmierung. Es ist verschiedentlich bekannt als: "ereignisgesteuerte Programmierung" oder "Fortsetzung-Weitergabe Stil" oder "evented Programmierung". Sie können die verschiedenen Begriffe googlen, wenn Sie mehr wissen möchten.
Das stimmt nicht. Wenn es global ist, ist es per Definition in allen Bereichen verfügbar. Wenn es eine lokale Variable namens 'myVariable' gibt, wird sie natürlich anstelle der globalen Version geändert. Wenn es wirklich global ist, können Sie 'window.myVariable' verwenden, um darauf zuzugreifen. – mowwwalker
Ihr Beispiel zeigt nicht, warum es im Rahmen des Erfolgsrückrufs nicht sichtbar wäre. Die einzige Sache, die es verbergen würde, wäre, dass es eine Variable mit dem gleichen Namen in einem engeren Bereich gibt, der sie schattiert. –
Hmm, ich denke, die Variable wird nicht geändert, weil Ajax kein Syncronhaus ist. Nicht sicher, wie man es jedoch syncrhronous machen kann – user1811367