在检测到假期时,我无法让以下函数返回true。警报正确触发,但结果始终返回false。我知道这是一个可变范围的问题,但我不确定如何正确修复它。
function isHoliday(date,currentProvince) {
var calDate = new Date(date);
var result = false;
$.get(
"@Url.Content("~/Holidays/HolidayList/?province=")"+currentProvince,
function(data) {
for (h=0; h<data.length; h++) {
holidayDate = new Date(
parseInt(data[h].date.replace("\/Date\(","").replace("\)\/",""))
);
if (holidayDate.getTime() == calDate.getTime()) {
alert("HOLIDAY");
result = true;
}
}
}
);
return result;
}
我能否以某种方式更改$ .get语句中函数(数据)的参数以传入和传出变量?还是有一种更好的方式?
答案 0 :(得分:2)
该函数在ajax调用完成之前返回;这就是$.get
中的回调是什么,以及为什么这是异步。
如果你想从这个ajax调用得到结果,那么你需要将剩下的逻辑连接成这个调用的回调,如下所示:
function isHoliday(date,currentProvince, callback) {
var calDate = new Date(date);
$.get("@Url.Content("~/Holidays/HolidayList/?province=")"+currentProvince, function(data) {
for (h=0; h<data.length; h++) {
holidayDate= new Date(parseInt(data[h].date.replace("\/Date\(","").replace("\)\/","")));
if (holidayDate.getTime() == calDate.getTime()) {
alert("HOLIDAY");
callback(true);
}
else
{
callback(false);
}
}
});
}
答案 1 :(得分:1)
正常函数返回并退出函数。
相反,在执行异步ajax请求时,只要需要,它就必须等待,直到请求完成并发回给你。
因此,当函数执行ajax调用时,不能依赖函数返回值。
解决问题的一个不错的方法是在你的函数中写一个回调函数,如:function isHoliday(date,currentProvince, myCallback) {
var calDate = new Date(date);
var result = false;
$.get("@Url.Content("~/Holidays/HolidayList/?province=")"+currentProvince, function(data) {
myCallback();
});
}
var callback = function() {
for (h=0; h<data.length; h++) {
holidayDate= new Date(parseInt(data[h].date.replace("\/Date\(","").replace("\)\/","")));
if (holidayDate.getTime() == calDate.getTime()) {
alert("HOLIDAY");
result = true;
}
}
//do whatever else you need to do after the ajax completes
};
isHoliday("12/01/19", "someProvince", callback);
答案 2 :(得分:0)
您的get请求是异步的,但javascript会继续执行。因此,它在处理get请求之前达到return result