for是在执行整个操作之前添加i++, ajax async



问题如下,我有一个数组,我执行一个for,遍历这个数组,对于数组内的每个元素,它执行AJAX请求,即使我把async: false属性,显然它仍然是一个异步请求,这使得变量i内部循环通过一切,只执行对数组的最后一个元素的请求。

for(let i = 0; i < array.length; i++){
let elemnt = array[i]
console.log(i)
$.ajax({
async: false,
url: 'https://xxx.xxxxxxxxxx.xxx.xx/'+elemnt,
type: 'GET',
success: (data)=>{
//does something with array element...                   
}
})
}

然后将console.log(i)放入输出:

0
*Perform AJAX request with array[0]*
1
*Perform AJAX request with array[1]*
2
*Perform AJAX request with array[2]*

不管它是什么

0
1
2
*Perform AJAX request with array[2]*

我相信这都是由于Ajax的异步实现,但我已经把async: false,我不知道它可能是什么。

提前感谢任何可以帮助的人。

不要循环遍历数组并在循环中运行ajax,而是创建一个只在ajax成功时才继续的函数。

在下面的例子中,cur是数组中要获取值的位置。对于ajax调用,我缩短了它,只是为了我的答案,显然您需要使用完整的ajax。

let cur = 0;
function runAjax() {
$.ajax({
......
success: (data) => {
if (cur == array.length) {
console.log("Done!");
} else {
cur++;
runAjax();
}
}
});
}

最新更新