zoukankan      html  css  js  c++  java
  • 在js中,ajax放在for中,ajax获取得到的变量有误

    先看代码

            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,//设置成同步

  • 相关阅读:
    PHP 开发 APP 接口 --Redis篇
    PHP 开发 APP 接口--静态缓存篇
    PHP 开发 APP 接口 --JSON、XML结合篇
    PHP 开发 APP 接口 --JSION篇
    PHP 开发 APP 接口--XML篇
    程序员必须掌握的600个英语单词
    Memcache
    伪静态
    ob缓冲
    函数的使用顺序---TABLES,USING,CHANGING
  • 原文地址:https://www.cnblogs.com/Crysta1/p/7904035.html
Copyright © 2011-2022 走看看