Ich versuche, über ein Array zu iterieren und eine Variable mit einer for-Schleife zuzuweisen. So etwas wie das:
function Person(name, status){
this.name = name;
this.status = status;
}
var status = [];
var array = ["bill","bob","carl","ton"];
function exAjax(function(){
for(var i = 0; i < array.length; i++){
var name = array[i];
console.log(name); =====> this gives the correct name
$.ajax({
url: xxxxxxx,
success: function(data){
if(data.stream === null){
var person = new Person(name, "dead");
console.log(name); =====> return undefined until the last
person
status.push(person);
}
}
})
name = "";
}
})
Das Problem, das ich habe, ist, dass der Name nicht in die Erfolgsfunktion kommt. Ich dachte, js fährt weiter nach oben, um nach der Variable zu suchen, wenn sie nicht in ihrem aktuellen Umfang existiert? Ich bekomme undefiniert für die Variable name, wenn ich versuche, console.log name! Scope beherrscht was mache ich falsch?
AJAX ist asynchron. Zu dem Zeitpunkt, zu dem die 'success'-Funktion ausgeführt wird, ist die for-Schleife bereits beendet. Was denkst du, ist der Wert "i" nachdem die Schleife beendet ist? – Xufox
Mögliches Duplikat von [JavaScript closure in loops - einfaches praktisches Beispiel] (http: // stackoverflow.com/questions/750486/javascript-closure-inside-loops-einfach-praktisch-beispiel) – Xufox
Vielen Dank! Wenn ich async setze: "false"; Für diesen Ajax-Aufruf wird das das Problem beheben? – powerup7