通过ajax选择日期和特殊日期加载以在gldatepicker中设置

时间:2013-05-05 05:08:46

标签: javascript jquery

我正在使用gldatepicker。我想从ajax为gldatepicker加载一些设置,例如星期几,特殊日期等。现在我有以下js代码:

$(document).ready(function () {
    loadAllSettings();
});
var loadAllSettings = function () {
    startDate = '';
    endDate = '';
    selectDay = '';
    offdays = '';

    $.ajax({
        url: "bs_client_function.php",
        type: "post",
        dataType: "json",
        data: {
            action: 'getDateRange'
        },
        success: function (html) {
            // alert(html.start);
            startDate = Date.parse(html.start);
            endDate = Date.parse(html.end);
        }

    });
    $.ajax({
        url: "bs_client_function.php",
        type: "post",
        dataType: "json",
        data: {
            action: 'getOffdays'
        },
        success: function (html) {
            i = 0;
            offdays = '[';
            while (i < html.length) {
                offdays = offdays + {
                    date: new Date(html[i]),
                    repeatYear: false,
                    cssClass: 'noday'
                };
                i = i + 1;
            }
            offdays = offdays + ']';
        }

    });
    $.ajax({
        url: "bs_client_function.php",
        type: "post",
        data: {
            action: 'getDays'
        },
        success: function (html) {
            var data = $.parseJSON(html);
            // alert("[" + data + "]");
            selectDay = '[' + data + ']';
            // alert(selectDay);
           showCalender(startDate, endDate, selectDay, offdays);
        }

    });
    alert(selectDay);
    console.log('selectDay' + selectDay);

};

我检查了所有数据是否正确格式化为gldatepicker推荐。在我的展示日历中 功能:

var showCalender = function (startDate, endDate, selectDay, offdays) {
    var dd = $('#mydate').glDatePicker({
        showAlways: true,
        allowMonthSelect: true,
        allowYearSelect: false,
        prevArrow: '\u25c4',
        nextArrow: '\u25ba',
        cssName: 'darkneon',
        selectableDOW: selectDay,
        dowOffset: 0,
        selectedDate: new Date(),
        selectableDateRange: [{
            from: new Date(startDate),
            to: new Date(endDate)
        }, ],
        specialDates: offdays
    });
};

现在只有stardate和enddate正确地工作。选择Day,offdays不起作用。我在控制台中打印selectDay我得到了这个:[1,2,3]但它没有woking。我错过了什么或应该是正确的方法。     提前致谢...

1 个答案:

答案 0 :(得分:0)

问题是如何获取数据以填充glDatePicker。 您有3个ajax调用,默认情况下这些调用是异步的,您在上一个成功函数中执行showCalender函数,但您无法确定前面的调用是否已完成。

您可以通过将async参数设置为false来使您的ajax调用同步,请参阅jQuery docs

  

async(默认值:true)类型:Boolean默认情况下,发送所有请求   异步(即默认设置为true)。如果你需要   同步请求,将此选项设置为false。跨域请求   和dataType:“jsonp”请求不支持同步操作。   请注意,同步请求可能会暂时锁定浏览器,   在请求处于活动状态时禁用任何操作。从jQuery 1.8开始,   不推荐使用async:false和jqXHR($ .Deferred);您   必须使用success / error / complete回调选项而不是   jqXHR对象的相应方法,如jqXHR.done()或   不推荐使用jqXHR.success()。

或者你可以在每次成功的回调中链接它们,但是你的代码很难保留,或者你可以使用这个插件管理多个ajax调用http://docs.jquery.com/AjaxQueue

它适用于本地数据,请参阅:http://jsfiddle.net/IrvinDominin/V59E7/

仅关注specialDates选项需要的对象:

   specialDates: [{
       date: new Date(0, 8, 5),
       data: {
           message: 'Happy Birthday!'
       },
       repeatYear: true,
       cssClass: 'special-bday'
   }, {
       date: new Date(2013, 0, 8),
       data: {
           message: 'Meeting every day 8 of the month'
       },
       repeatMonth: true
   }]