js中,for循環里面放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,那么也是有問題了。

解決了半小時,終於明白了問題的所在:

            for 循環是一個單線程的東西,而ajax是多線程的,之所以稱之為異步同步,是因為執行到ajax的時候去后台開啟了一個線程,但是for循環本身就是一個單線程的東西,那么執行到ajax的時候,ajax開啟了一個線程,for

循環是沒有等他的,知道for循環結束的時候,才會把ajax返回的數據拿回來,所以會出問題

 

解決辦法:只需要把ajax改成同步的就可以了,每次for循環,都要去加載ajax方法,並且拿到他返回的數據,只需要在ajax中間加一個代碼就可以搞定了。async: false,//設置成同步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM