Если я вас правильно понимаю, вы хотите асинхронно получить некоторые данные через AJAX в onChangeMonthYear
и сделать их доступными в beforeShowDay
для отображения обновленных данных.
Помогает понять порядок звонков. Когда календарь появляется впервые, выполняется набор вызовов на beforeShowDay
. На данном этапе еще нет данных от вашего AJAX-вызова (т. Е. От test.php
).
После того, как пользователь изменит месяц / год, будет вызван onChangeMonthYear
, а затем снова будет сделана группа вызовов на beforeShowDay
. На этом этапе все еще не должно быть данных из вашего вызова AJAX, если только вызов AJAX на test.php
не сможет вернуться достаточно быстро, чтобы некоторые из вызовов на beforeShowDay
могли получить доступ к возвращенному значению.
Затем возвращается вызов AJAX, и возвращенные данные каким-то образом передаются на beforeShowDay
для отображения.
Как видите, то, что вы пытались сделать, не сработало бы, поскольку вызов AJAX не был бы вовремя для beforeShowDay
сбора данных, даже если вы "правильно" передали его. Что вы хотите сделать, так это назначить возвращенные данные из AJAX где-нибудь, а затем обновить средство выбора даты, чтобы снова вызывался beforeShowDay
. Вы можете сохранить данные в произвольном объекте jQuery с помощью .data()
. Итак, вы можете сделать что-то вроде этого:
$('#datepicker').data('datafromphp', []).datepicker({dateFormat: 'dd-mm-yy', currentText: 'Now', changeMonth: true, changeYear: true, altField: '#alternate', altFormat: 'DD, d MM, yy', onSelect: function(dateText, inst) {},
onChangeMonthYear: function(year,month,inst){
$.post("test.php", {action: "TEST", month: month, year: year},
function (data){
$("#datepicker").data('datafromphp', data).datepicker('refresh');
}
,"html");
},
beforeShowDay: function (date){
var getdatafromphp= $(this).data("datafromphp");
}
});