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

时间:2022-01-30 12:47:00

这次项目中因为前端有事儿,项目紧急加个新需求,于是自己硬着头皮上去看了下前端的逻辑后便开始动手了,但是为了简单起见就直接自己写了个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);
}
});