js中,for循环里面放ajax,ajax访问不到变量以及每次循环获取不到数据问题总结

首先晒下本身代码ajax

for ( var i = 0; i < rows.length; i++) {
        
        
        $.ajax({
            type:'POST',
            url:'${ctx }/admin/store_item/findStoreItemsByType?typeid=' +flag+'&id='+rows[i].id,//请求的url地址
            async: false,//设置成同步
            dataType:'json',
            success:function(data){
                 if(flag==1){
                    
                    $('#chexingtable').datagrid('updateRow',{
                        index:i,
                        row:{price:data.price1,sumprice:data.price1*data.bz_gs}
                    });
                
                }else if(flag==2){
                    
                    $('#chexingtable').datagrid('updateRow',{
                        index:i,
                        row:{price:data.price2,sumprice:data.price2*data.bz_gs}
                    });
                }else if(flag==3){
                    
                    $('#chexingtable').datagrid('updateRow',{
                        index:i,
                        row:{price:data.price3,sumprice:data.price3*data.bz_gs}
                    });
                    
                }else if(flag==4){
                    $('#chexingtable').datagrid('updateRow',{
                        index:i,
                        row:{price:data.price4,sumprice:data.price4*data.bz_gs}
                    });
                } 
                
            }
    });
    
        
    }

刚开始的时候,每次循环是获取不到ajax中的值的,在ajax中,若是想获取到变量I,那么也是有问题了。json

解决了半小时,终于明白了问题的所在:多线程

            for 循环是一个单线程的东西,而ajax是多线程的,之因此称之为异步同步,是由于执行到ajax的时候去后台开启了一个线程,可是for循环自己就是一个单线程的东西,那么执行到ajax的时候,ajax开启了一个线程,for异步

循环是没有等他的,知道for循环结束的时候,才会把ajax返回的数据拿回来,因此会出问题async

 

解决办法:只须要把ajax改为同步的就能够了,每次for循环,都要去加载ajax方法,而且拿到他返回的数据,只须要在ajax中间加一个代码就能够搞定了。async: false,//设置成同步url

相关文章
相关标签/搜索