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