for 循环与ajax 中存在的异步问题

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<ul>
<li class="list"></li>
<li class="list"></li>
<li class="list"></li>
<li class="list"></li>
<li class="list"></li>
<li class="list"></li>
<li class="list"></li>
<li class="list"></li>
<li class="list"></li>
<li class="list"></li>
</ul>
</body>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script>
var arr=document.getElementsByClassName("list")
var m=0;
for(var i = 0 ; i < arr.length; i++){
// m++;
// console.log(m)
// console.log(arr)
// arr[i].innerHTML="这是列表"
// console.log(arr[i])
$.ajax({
type:"get",
url:"new_file.json",
async:true,
success:function(data){
console.log(i);
console.log(data)
}
});


}
function fn(){

}
</script>
</html>

代码如上,需求是 进行一个for  循环, 每循环一次,然后发送一次ajax 请求,得到数据并打印

但事实情况是得到的i值只是最后一次的循环的最终结果,原因是因为ajax 是异步的请求,而for 循环

是同步的,所以 同步执行的时间永远快于异步执行的时间,因此它只会得到for循环最终的结果,

这个时候 我们需要采取的办法就是把ajax 请求封装 成一个函数, 然后在for循环里面做这个函数的执行 就可以解决问题了

例子如下:

//图片加载
window.onload = function() {

var dataUrl = document.getElementsByClassName("money");

function selfajax(index){

$.ajax({
type: "get",
url: "***",
async: true,
dataType: 'html',
data: {
url: dataUrl[index].dataset.adress
},
success: function (data) {
dataUrl[index].innerHTML = data;
}
})

}

for(var i =0; i<dataUrl.length;i++){
selfajax(i);
}



}
这样进行一次函数的封装 就可以完美的解决问题了

转载于:https://www.cnblogs.com/shuangjiang/p/9593277.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值