我正在使用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。我错过了什么或应该是正确的方法。 提前致谢...
答案 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
}]