我正在使用jQuery Datepicker,我试图通过ajax突出显示来自mysql的日期。这是我的代码。
_class
现在从ajax成功我将以这种格式返回日期,即JSON
cls
var appendDate = '';
var days_custom = '';
$( "#datepicker").datepicker({
dateFormat: 'yy-mm-dd',
beforeShowDay: function(date) {
$.ajax({
type: "GET",
url: URL,
success: function(data)
{
var data1 = jQuery.parseJSON(data);
days_custom = '[';
for(i=0;i<data1.length;i++)
{
days_custom = days_custom + '"'+data1[i].mddate+'",';
}
days_custom.slice(0,-1)+']';
appendDate = days_custom;
}
});
var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
for (i = 0; i < appendDate.length; i++) {
if($.inArray(y + '-' + (m+1) + '-' + d,appendDate) != -1) {
return [true, 'free-day', 'no to-do items due'];
}
}
return [true];
}
});
$('.free-day').find('a').css("color","yellow");
$('.free-day').find('a').css("background","rgba(0, 0, 0, 0.74)");
});
格式应该是这样的
[{"status":"3","mddate":"2016-06-07"},{"status":"3","mddate":"2016-06-14"},{"status":"3","mddate":"2016-06-09"},{"status":"3","mddate":"2016-06-10"}]
我无法突出显示来自mysql的datepicker上的日期。如何解决这个问题
答案 0 :(得分:2)
您的问题是,success
函数将在请求返回到服务器(异步)后运行,因此for
上的appendDate
循环将执行没有(因为当执行该代码时变量仍然是一个空字符串)。
您可以在async:false
请求中设置$.ajax
,以确保请求同步完成。这样,javascript代码的执行将等待请求返回,然后才会运行你在那里的for循环。
但是 - 我认为你的代码不就像这样工作。
目前,对于datepicker
正在呈现的每一天,您都会向服务器发送新请求。这意味着您希望日期选择器显示的每月约30个服务器请求。
相反 - 一旦加载页面 - 将请求发送到服务器,并且只有在请求完成后 - 创建datepicker
。
我认为你应该做的另一个改变 - 保持Array
。我真的不明白为什么要将请求中的返回数据转换为字符串。
这是一个示意性解决方案。我不确定您服务器的响应究竟是什么样的,所以您可能想要更改一些内容:
var days_custom = [];
$.ajax({
type: "GET",
url: URL,
dataType: 'json',
success: function(data) {
for (var t in data) {
days_custom[days_custom.length] = data[t].mddate
}
$( "#datepicker").datepicker({
dateFormat: 'yy-mm-dd',
beforeShowDay: function(date) {
t_date = $.datepicker.formatDate('yyyy-m-dd', date);
if (days_custom.indexOf(t_date) > -1) {
return [true, 'free-day', 'no to-do items due'];
}
return [true];
}
});
}
});