這次項目中因為前端有事兒,項目緊急加個新需求,於是自己硬着頭皮上去看了下前端的邏輯后便開始動手了,但是為了簡單起見就直接自己寫了個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); } });