首先上一段问题代码及执行结果:
$.ajax({
type : "post",
url : "${contextPath}/experience/checkClassStatus",
async:false,
data : {
"classCode":classCode
},
success : function(data){
console.log("返回参数"+data);
if(data==1){
COM_TOOLS.alert("该体验课已开班,无法操作");
console.log("return后");
return true;
}else{
console.log("return后");
return false;
}
},
error : function(){
COM_TOOLS.alert(TEDU_MESSAGE.get('platform.common.msg.-1102'));
return true;
}
});
console.log("ajax请求后");
运行结果:
可以看出ajax配置了同步,但实际运行时return并没有终止程序运行,
分析后得出问题所在,回调函数success和error中的return,只是终止了return所在的回调函数,并没有终止ajax所在方法,我觉得这是我们大部分都是写后端代码造成的惯性思维,看到return就觉得整个方法就终止了,其实这种情况是相当于java中的匿名内部类中的方法的return一样,但匿名内部类在实际业务开发中并不多见。
针对此情况可以定义全局变量,在ajax代码后根据变量的值判断是否return。
下面是修改后的代码:
var check=0;
$.ajax({
type : "post",
url : "${contextPath}/experience/checkClassStatus",
async:false,
data : {
"classCode":classCode
},
success : function(data){
console.log("返回参数"+data);
check=data;
},
error : function(){
COM_TOOLS.alert(TEDU_MESSAGE.get('platform.common.msg.-1102'));
return true;
}
});
if(check==1){
COM_TOOLS.alert("该体验课已开班,无法操作");
console.log("return后");
return true;
}else{
console.log("return后");
return false;
}
console.log("ajax请求后");
运行结果:
从结果可以看出,此时return才是终止了方法的执行。