Ich bin neu in Ajax und JavaScript. Was versucht wird ist, eine Ajax-Funktion mehrmals aufzurufen, um bestimmte Daten von einer Ressource abzurufen und dann alle Daten in ein Array zu pushen, damit ich sie später im Code verwenden kann. Hier ist mein Code.So rufen Sie eine Ajax-Funktion in einer for-Schleife
var arr = [];
var users = ["brunofin", "comster404", "ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];
for (i = 0; i < users.length; i++) {
$.ajax({
url: "https://api.twitch.tv/kraken/streams/" + users[i],
success: function(data) {
arr.push(data);
},
error: function(data) {
arr.push("blank");
},
complete: function() {
if (i == users.length) {
console.log(arr); //This seem to print even when the condition isn't true
}
}
});
}
Das Problem mit dem Code ist, dass es auf der Konsole ausgibt, selbst wenn i
-users.length
Meine Frage ist nicht gleich ist; Wie stelle ich sicher, dass es wartet, bis i == users.length
wahr ist, bevor es auf der Konsole druckt? Bitte beachten Sie, dass ich immer noch möchte, dass der Prozess asynchron ist.
AJAX ist Asynchronous (per Code though) dh Sie‘ Ich werde nie wissen, wann du die Antwort bekommst. Ich denke, das ist nicht der richtige Ansatz. Aber was Sie brauchen könnten, ist 'async: false' [* NICHT DIE RICHTIGE MÖGLICHKEIT, DAS ZU TUN *] –
Ist das wonach Sie suchen? http://stackoverflow.com/questions/5052543/how-to-fire-ajax-request-periodically – TrzasQ
Auch relevant - diese Bedingung ist nicht, was Sie denken, dass es ist. Hier ist [weitere Informationen] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example). – vlaz