关于js循环内请求后台,要求循环一次请求一次

这篇博客探讨了JavaScript中for循环与异步操作的问题,指出由于JS的单线程特性,异步任务不会阻塞同步代码执行。在给定的例子中,$.ajax()作为异步任务,在for循环中导致预期的'0,A'和'1,A'输出顺序错误。解决方案包括使用`let`替换`var`以创建块级作用域,或者利用闭包来保持正确的作用域。这两个方法都能确保异步回调函数能够访问到正确的循环变量值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

for(var i=0; i<2; i++) {
    console.log(i)
    	$.ajax({
           ...
		success: function (res) {
             console.log("A")
        }	

       });
}

发现结果为0,1,A
想要
0,A
1,A


原因是因为for循环不会等待异步任务执行结果。原理:Js是单线程的,这就意味着所有任务需要放入任务队列,一件事干完才能下一件事。异步任务会放在执行栈的尾部,当所有同步任务执行完,才会执行异步任务。
解决办法1:var 修改为let
for(leti=0; i<2; i++) {
    console.log(i)
    	$.ajax({
           ...
		success: function (res) {
             console.log("A")
        }	

       });
}
解决办法2:使用闭包
for(leti=0; i<2; i++) {
    console.log(i)
    (function(i){
    	$.ajax({
           ...
		success: function (res) {
             console.log("A")
        }	

       });
    }}(i)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值