zoukankan      html  css  js  c++  java
  • 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,//设置成同步

  • 相关阅读:
    springboot-项目属性配置
    网络编程
    HttpServlet---getLastModified与缓存
    TCP的三次握手和四次挥手
    数据库事务隔离级别-- 脏读、幻读、不可重复读
    js 数组,字符串,json互相转换
    表格单元格td设置宽度无效的解决办法
    判断IE版本的HTML语句详解,如:<!--[if IE 9]> 仅IE9可识别 <![endif]-->
    IE主页被篡改为360导航终极处理办法
    前端常见问题
  • 原文地址:https://www.cnblogs.com/weiloong/p/4913695.html
Copyright © 2011-2022 走看看