【发布时间】:2016-12-26 11:41:00
【问题描述】:
我是 ajax 和 JavaScript 的新手。 我要做的是多次调用 ajax 函数以从资源中获取某些数据,然后将所有数据“推送”到一个数组中,以便稍后在代码中使用它。这是我的代码。
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
}
}
});
}
代码的问题在于,即使i 不等于users.length,它也会打印到控制台
我的问题是;我如何确保它等到i == users.length 为真后再打印到控制台?
请记住,我仍然希望该过程是异步的。
【问题讨论】:
-
AJAX 是异步的(尽管根据您的代码),也就是说,您永远不知道什么时候会收到响应。所以我觉得这不是正确的方法。但是您可能需要的是
async:false[ * 不是这样做的正确方法 * ] -
也相关 - 条件不是你想的那样。这里是some more information。
-
你的 if 语句也永远不会为真,
i永远不会等于数组长度。 -
@MageshKumaar 只需调用 ajax 作为 async:false
标签: javascript jquery ajax