在 jQuery Datepicker 上突出显示 MySql 日期

Posted

技术标签:

【中文标题】在 jQuery Datepicker 上突出显示 MySql 日期【英文标题】:Highlighting MySql dates on jQuery Datepicker 【发布时间】:2016-12-07 16:42:06 【问题描述】:

我正在使用 jQuery Datepicker,我正在尝试通过 ajax 突出显示来自 mysql 的日期。这是我的代码。

 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)");
);

现在从 ajax 成功开始,我以 JSON 格式返回日期

["status":"3","mddate":"2016-06-07","status":"3","mddate":"2016-06-14","status":"3","mddate":"2016-06-09","status":"3","mddate":"2016-06-10"]

appendDate的格式应该是这样的

["2016-8-21","2016-8-24","2016-8-27","2016-8-28"];

我无法在来自 mysql 的 datepicker 上突出显示日期。如何解决这个问题

【问题讨论】:

$.ajax 是异步的。见***.com/questions/14220321/… 【参考方案1】:

您的问题是,一旦数据从请求返回到服务器(异步),success 函数就会运行,因此您在 appendDate 上的 for 循环将什么也不做(因为变量是执行该代码时仍然是一个空字符串)。

您可以在$.ajax 请求中设置async:false,以确保请求同步完成。这样,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];
            
        );
    
);

【讨论】:

感谢您解释 ajax 和 datepicker 流程​​。是的,你是对的,我向服务器发出了大约 30 个请求。在我的代码中,我将 ajax 放在 datepicker 中,因此请求取决于 beforeShowDay 一个月中的天数。感谢您的时间。欢呼

以上是关于在 jQuery Datepicker 上突出显示 MySql 日期的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 的 datepicker 突出显示特定范围内的日期

在jquery UI datepicker中突出显示日期

在 Jquery Datepicker 中动态更改突出显示的日期

突出显示两个选定日期之间的日期 jQuery UI Datepicker

突出显示 jQuery datepicker 日期

jQuery UI Datepicker:今天也被选中时不要突出显示