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配置了同步,但实际运行时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才是终止了方法的执行。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值