先看代码
for(var i=0;i<tds.length;i++){ mui.ajax(url+'api/client/gifts/isSigned', {data :{ sqId:"123", visitorId : "123", signedDate : "123" }, type : 'POST', dataType:'json', async: false,//设置成同步 success : function(data){ if(data.isSigned == true){ tds[i].id = "img"; } }, error : function(xhr,type,errorThrown){ mui.toast('系统出现错误,请联系管理员'); } }); }
经测试,在没将ajax设置成同步之前,ajax中获取到的变量i都是tds.length的值,即最后一个值,显然是不对的,查阅资料后得知:for 循环是一个单线程的东西,而ajax是多线程的,之所以称之为异步同步,是因为执行到ajax的时候去后台开启了一个线程,但是for循环本身就是一个单线程的东西,那么执行到ajax的时候,ajax开启了一个线程,for循环是没有等他的,知道for循环结束的时候,才会把ajax返回的数据拿回来,所以会出问题。
解决办法:只需要把ajax改成同步的就可以了,每次for循环,都要去加载ajax方法,并且拿到他返回的数据,只需要在ajax中间加一个代码就可以搞定了。async: false,//设置成同步