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

  • 相关阅读:
    发送带有正文以及附件的邮件
    软件测试笔记
    java开发 中台
    postman测试带有json数据格式的字段
    maven详解之仓库
    Maven与nexus关系
    占位
    Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错
    了解facade设计模式
    postman使用
  • 原文地址:https://www.cnblogs.com/Crysta1/p/7904035.html
Copyright © 2011-2022 走看看