我正在尝试将我从onChangeMonthYear启动的函数中获取的数据传递给beforeShowDay启动的函数。我尝试了各种方法,比如将我从test.php获得的数据分配给在外部声明的变量,但无济于事。所以我所做的只是使用来自test.php的检索数据更新文本字段,并要求beforeShowDay中的函数从那里获取数据。这是我的代码的一部分
$(document).ready(function() {
$('#datepicker').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){
$("#datafromphp").val(data);
}
,"html");
},
beforeShowDay: function (date){
var getdatafromphp= $("#datafromphp").val();
}
});
});
肯定有更好的方法吗?
答案 0 :(得分:2)
如果我理解正确,你想在onChangeMonthYear
中异步地通过AJAX获取一些数据,并在beforeShowDay
中访问它以显示更新的数据。
有助于理解通话的顺序。当日历首次出现时,会对beforeShowDay
进行一连串调用。在此阶段,您的AJAX调用尚未提供数据(即来自test.php
)。
用户更改月份/年后,系统会调用onChangeMonthYear
,然后再次向beforeShowDay
发出一堆电话。在这个阶段,你的AJAX调用仍然没有数据,除非对test.php
的AJAX调用设法足够快地返回到beforeShowDay
的某些调用来访问返回的值。
然后AJAX调用返回,返回的数据以某种方式传递给beforeShowDay
以显示。
正如您所看到的,您尝试做的事情将无法正常工作,因为即使您正确地“传递”了AJAX调用,beforeShowDay
也无法及时获取数据。你想要做的是,从某处的AJAX分配返回的数据,然后刷新datepicker,这样就会再次调用beforeShowDay
。您可以使用.data()
将数据存储到任意jQuery对象。所以,你可以这样做:
$('#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");
}
});