突出对 jQuery 之上的 MySql 日期

标签: jQuery MySQL ajax
发布时间: 2017/4/8 20:22:59
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我使用 jQuery 之上,我尝试从 mysql 通过 ajax 来突出显示日期。这是我的代码。

 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 之上的日期。如何解决这个问题

解决方法 1:

你的问题是, success 函数会运行一次返回的数据是从请求到服务器 (异步),所以 for 你所拥有的循环 appendDate 将什么也不做,(因为执行这段代码时,变量仍是空字符串)。

您可以设置 async:false$.ajax 请求,以确保请求以同步方式完成。这种方式执行 javascript 代码将等待请求返回和才会运行 for 循环,你有。

不过-我真的认为你的代码工作应该像这样。

目前,为每一天, datepicker 是你呈现,到您的服务器发送新的请求。这意味着 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];
            }
        });
    }
});
官方微信
官方QQ群
31647020