Ваш код datepicker будет (потенциально) выполняться до завершения вызова ajax. Как минимум, попробуйте переместить часть кода DatePicker в обратный вызов $ .post: -
if ($("#calendar").length)
{
var dates;
$.post("/dates/jsondates.php",function(data)
{
for(var i=0; i<data.length; i++)
{
data[i].start = new Date(data[i].start);
data[i].end = new Date(data[i].end);
}
dates = data;
$("#calendar").datepicker(
{
beforeShowDay: function(date)
{
for(var i=0; i<dates.length; i++)
{
if(dates[i].start<date<dates[i].end)
{
return new Array(0, "booked", dates[i].comment);
}
}
return new Array(1);
}
});
}, "json");
}
Редактировать: В качестве отступления, и если бы это был я, я бы, вероятно, разделил его на какую-то функцию вызывающего абонента, чтобы получить данные даты и передать их в ответный вызов. Например: -
function __callDateController(callback)
{
$.post("/dates/jsondates.php",function(data)
{
for(var i=0; i<data.length; i++)
{
data[i].start = new Date(data[i].start);
data[i].end = new Date(data[i].end);
}
if (callback !== undefined) {
callback(data);
}
}, "json");
}
А затем отправьте обратный вызов, чтобы ваш обработчик даты имел дело с: -
__callDateController(function(dates)
{
$("#calendar").datepicker(
{
beforeShowDay: function(date)
{
for(var i=0; i<dates.length; i++)
{
if(dates[i].start<date<dates[i].end)
{
return new Array(0, "booked", dates[i].comment);
}
}
return new Array(1);
}
});
});