加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:02:20 所属栏目:百科 来源:网络整理
导读:!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"/

<!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);    }}这样进行一次函数的封装 就可以完美的解决问题了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读