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