在jQuery Datepicker上突出显示MySql日期

时间:2016-08-02 10:57:02

标签: jquery mysql ajax date datepicker

我正在使用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上的日期。如何解决这个问题

1 个答案:

答案 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];
            }
        });
    }
});