0

我是 javascript 新手,我想创建一个日期选择器,使用带有日期列表的 json 响应突出显示某些日期。

这就是我正在尝试的:

var dates = [];
dates = getDays();
$(function () {
    $("#datepicker").datepicker({
        beforeShowDay: setHoliDays
    });
    function setHoliDays(date) {
        for (var i = 0; i < dates.lenght; i++) {
            if (dates[i] == date) {
                return [true, "green"];
            }
        }
        return [true, ""];
    }
});
function getDays() {
    var arr = [];
    $.getJSON("/getDates", function (data) {
        $.each(data, function (id, val) {
            arr.push(val);
        });
        return arr;
    });
} 

JSON 响应是这样的:

["2013-03-18T12:00:00","2013-03-19T12:00:00","2013-03-20T12:00:00",
"2013-03-21T11:00:00","2013-03-21T10:00:00","2013-03-21T08:00:00",
"2013-03-25T10:00:00","2013-03-26T08:00:00","2013-03-27T09:00:00",
"2013-03-28T08:00:00","2013-03-28T09:00:00","2013-03-28T10:00:00",
"2013-03-28T11:00:00","2013-03-28T12:00:00"]

我究竟做错了什么?

4

1 回答 1

0

您的 getDays 函数正在进行异步调用。这意味着该方法在实际从远程资源接收到响应之前返回(在这种情况下不返回)。要利用此响应,您的回调函数将需要创建数组并将其保存在某处(全局变量最简单,但肯定不推荐,因为我不会在这里讨论)。然后你的 setHoliDays 函数可以利用它。

鉴于您已经在使用全局,您的回调可能会以如下方式结束:

$.each(data,function(id,val){
  arr.push(val);
});
dates = arr;
于 2013-03-25T19:09:17.317 回答