ajax异步请求导致的问题

做的功能需要到后台进行日期校验,然后我发起了ajax请求

function checkDate_effectiveDate(){
	var startDate = new Date($('#feeParaInfoChgZYNJPlanInfo_feeRateStartDate').datebox('getValue'));
	flag_ = "N";
	$.ajax({
		url : '../../public.asp',
		type : 'post',
		data : {
			funcId : "checkDate_effectiveDate",
			planCode : $('#planCode').val(),
			startDate : startDate.toLocaleString()
		},
		dataType:'json',
		success : function (data){
			console.log(data)
			if(data[0].flag == 'Y'){
				flag_ = "Y";
			}
		}
	});
	if (flag_ == "Y"){
		return false;
	}
	return true;
}

请求的返回结果是正常的,通过打印返回结果可以发现data[0].flag就是Y,但就是不进if(data[0].flag == 'Y')这个判断,导致不执行flag_ = "Y",然后无论怎样返回都是true。
然后我在这两个位置分别打了断点

调试时发现程序是先走到了第二个断点的位置,这时才意识到ajax的异步问题。
也就是说,在ajax去请求的同时已经开始走下面的语句了,也就是这儿

在这个方法的最开始已经把flag_赋值为N,在进入这个if (flag_ == "Y")判断时,ajax还没有执行完,所以没有给flag_重新赋值,所以一直都是返回true。
发现了这个问题之后把ajax的异步设为false就可以解决了, 让它同步执行。

posted @ 2022-10-10 12:51  程长新  阅读(130)  评论(0)    收藏  举报