首先晒下自己代码
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,//设置成同步