这是我的jQuery代码。它应解析this php脚本返回的json。知道php工作。它还应该将日期文字转换为javascript日期对象。但是,dates.length
发生错误。任何人都可以看到代码有什么问题吗?
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;
}, "json");
$("#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);
}
});
}
答案 0 :(得分:1)
问题是您的日历日期选择器代码在AJAX处理完毕之前正在执行。
你的datePicker代码需要进入$ .post回调函数,在for循环下面,并在dates = data;
答案 1 :(得分:1)
你的日期选择代码将(可能)在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");
}
编辑:顺便说一下,如果是我,我可能会把它分成某种调用函数来获取日期数据并给它一个回调。 E.g: -
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);
}
});
});