Ajax设置为同步(async:false)后不生效的问题

首先上一段问题代码及执行结果:

$.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设置为同步(async:false)后不生效的问题_第1张图片
可以看出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才是终止了方法的执行。

你可能感兴趣的:(零散知识点)