0

当检测到假期时,我无法让以下函数返回 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 语句中函数(数据)的参数以将变量传入和传出?还是有更好的方法?

4

3 回答 3

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);
                        }
                    }
                 });
             }
于 2012-05-11T15:29:16.723 回答
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);
于 2012-05-11T15:28:17.193 回答
0

您的 get 请求是异步的,但 javascript 会继续执行。因此,它return result在处理get请求之前到达

于 2012-05-11T15:28:55.213 回答