问题如下,我有一个数组,我执行一个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();
}
}
});
}