2013-03-25 52 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;