ajax中的同步与异步修改数据的问题


这次项目中因为前端有事儿,项目紧急加个新需求,于是自己硬着头皮上去看了下前端的逻辑后便开始动手了,但是为了简单起见就直接自己写了个ajax调服务来获取数据,然后修改前端定义的全局数据

 //ajax来请求数据
                   $.ajax({
                        method:config.methodGet,
                        url:"http://localhost:8080/yzxx",
                        dataType:'json',
                        data:{"xxx":"111"},
                        success: function (data) {
                            var _data=data;
                               if(_data){
                                   _this.mapKey = data.mapKey;
                                   _this.mapID = data.mapID;
                                   _this.level = data.level;
                                   _this.isQsMap = data.isQsMap;
                                   _this.isReturn = data.isViewReturn;
                               }
                        },
                        error: function (data,textStatus, errorThrown) {
                            //  报错信息
                            fdGlobal.requestError(data, textStatus, errorThrown);
                        }
                    });

_this对象是前端定义的一个全局变量,在示例代码中我修改了_this对象里面的值,并希望在后面的程序执行时使用我修改后的_this对象,但是经过在代码执行中,经过js调试发现,在第二个ajax中_this作为参数,查看_this的值已经改变,但是在后台服务中接收到的参数并没有改变,经过查阅资料得知,ajax默认为异步请求,在开始执行ajax代码时,后面的代码不会等待ajax请求执行完毕便会直接执行,所以我在第一个ajax中修改了_this的值,在还没有修改完毕时,第二个ajax开始执行,这时用到的参数_this是还没有修改的值,所以后台接收到了旧的值,而在第二个ajax将请求发送到后台之后,_this的值才被第一个ajax请求修改,所以需要注意,在ajax请求中如果对全局参数有修改的行为,并且后面需要用到修改后的正确值,需要对方法标注为同步请求,具体方式为增加参数 async:false  示例如下

$.ajax({
                        method:config.methodGet,
                        url:"http://localhost:8080/yzxx",
                        dataType:'json',
              //设置为同步请求 async:
false, data:{"xxx":"111"}, success: function (data) { var _data=data; if(_data){ _this.mapKey = data.mapKey; _this.mapID = data.mapID; _this.level = data.level; _this.isQsMap = data.isQsMap; _this.isReturn = data.isViewReturn; } }, error: function (data,textStatus, errorThrown) { // 报错信息 fdGlobal.requestError(data, textStatus, errorThrown); } });

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM