2 qq 39877370 qq_39877370 于 2017.09.19 14:12 提问

jQuery for循环进行了异步请求,怎么让它每一次循环完全执行完毕之后再执行下一个循环 5C

for(var i = 0 ; i < arr.length ; i++){
jQuery.get(arr[i],function(data){
var reg = /"(.*?)"/g
var str1 = "";
data.replace(reg,function($1){
str1 += $1.slice(1,-1);
})

            console.log(str1);
        })
    }
这样子怎样才能让每次循环执行完毕之后才去执行下一次循环呢

7个回答

m0_38093650
m0_38093650   2017.09.19 15:05

$.ajaxSetup({
async: false
});
将异步设置为同步就可以一步一步的执行

qq_39877370
qq_39877370 回复啊喵是他: 我加完这个后那个页面不能正常显示了,还有什么解决办法吗
2 个月之前 回复
m0_38093650
m0_38093650 在你的语句前面加这个就行
2 个月之前 回复
m0_38093650
m0_38093650   2017.09.19 16:10

for(var i = 0 ; i < arr.length ; i++){
fun(arr);
}

function fun(arr){
$.ajaxSetup({
async: false
});
jQuery.get(arr,function(data){
var reg = /"(.*?)"/g
var str1 = "";
data.replace(reg,function($1){
str1 += $1.slice(1,-1);
})
console.log(str1);
})
}

把请求提成一个函数像这样试试

m0_38093650
m0_38093650 回复qq_39877370: 按F12 再点 Console 看看错误是怎么样的,
2 个月之前 回复
qq_39877370
qq_39877370 没有用,页面还是异常
2 个月之前 回复
r562253897
r562253897   2017.09.19 16:42

同楼上,jqury ajax是可以设置为同步的。

m0_38082783
m0_38082783   2017.09.19 16:51

如果你想这个页面直接显示完全而且正确,你这种我建议你在上一个页面先加载好,然后做浏览器存储,到了这个页面,可以直接读取数据,这样快的多,就不用考虑这个页面的同步异步导致出现的各种问题。

q213546879
q213546879   2017.09.19 17:28

不要用for循环写 用函数的回调来写这个循环
参考一下这个函数的调用方式

 <script>
    var i=0;
    run();
    function run(){
        console.log('这是第'+i+'次循环------------------------');
        console.log('在这做什么事情,比如你的ajax请求');
        console.log('请求回来了,数据有了,处理中...');
        console.log('接下来判断是否要进行下一次循环');
        if(i<10){
            i++;
            run();
        }else{
            console.log('循环完事了!');
        }
    }
</script>
Druning
Druning   2017.09.19 17:38

递归回调,直到不想回调了结束递归

jkl012789
jkl012789   2017.09.19 17:46

定时器 设置一个全局变量 每执行完一次异步请求就改一下那个值,定时器循环校验那个值

Csdn user default icon
上传中...
上传图片
插入图片