2013-03-25 54 views
0

我是新来的JavaScript,我想创建一个日期选择器,使用带有日期列表的JSON响应来突出显示某些日期。JavaScript变量是否丢失?

这就是我想:

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

欢迎** **异步的奇妙世界!你不能那样做。 – SLaks 2013-03-25 19:07:27

+2

如何在启动日期选择器之前简单加载所有日期?它看起来像一个简单的请求,没有任何params发送... – raina77ow 2013-03-25 19:08:43

+0

hi @ raina77ow我可以加载所有日期,但想法是当用户更改月份加载日期并突出显示他们.. – rafuru 2013-03-25 19:57:00

回答

0

您的getDays函数正在进行异步调用。这意味着该方法在从远程资源实际收到响应之前返回(本例中没有任何内容)。为了使用这个响应,你的回调函数需要创建数组并将其保存到某个地方(全局变量最简单但肯定不推荐,因为我不会在这里介绍)。然后你的setHoliDays函数可以利用这个。

既然你已经用上了一个全球性的,你的回调可能最终是这样的:

$.each(data,function(id,val){ 
    arr.push(val); 
}); 
dates = arr;