我使用fullcalendar来显示我的站点成员的事件。每个人都可以添加自己的事件。每个事件必须有唯一的ID,我在PHP中使用SELECT INCREMENT(MAX(' ID '))。然后适当的var被传递给JavaScript,这是一个问题。在第二次尝试添加新事件时,这个数字被提供给fullcalendar renderEvent函数。第一次点击日历时,变量是空的(在名为newEventId的变量中)。
下面是我的代码:function showCalendar() {
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
var newEventId = '';
$('#kalendarz').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month'
},
editable: false,
dayClick: function(e)
{
$.getJSON('/ajax/call/bands/AddEvent', function(data) {
newEventId = data.dane;
});
console.log(newEventId); // <- empty, then with ID at second click...
$("#kalendarz").fullCalendar('renderEvent',
{
title: 'Termin zajęty',
start: e,
id: newEventId
});
},
});
}
有什么问题吗?renderEvent函数不等待getJSON完成工作?我能修好它吗?
$.getJSON
是AJAX, AJAX是异步的!在$.getJSON
回调函数内设置:
$.getJSON('/ajax/call/bands/AddEvent', function (data) {
newEventId = data.dane;
$("#kalendarz").fullCalendar('renderEvent', {
title: 'Termin zajęty',
start: e,
id: newEventId
});
});
getJson()发起一个AJAX请求,这是异步的,getJson在发起AJAX请求后返回,但这并不意味着请求本身已经完成。因此,你可以移交一个函数onSuccess,它将在请求完成时使用接收到的数据调用。
如果机制不能以这种方式工作,你就不能在请求发送时做任何事情-想象一下点击某处,点击调用一个函数并以某种方式启动请求,然后一切都将等待直到请求完成:在最高级别,你甚至不能再移动鼠标,直到你收到一些响应数据-这根本不是用户友好的;)
解决你的问题很容易把所有的代码后,你的请求,这取决于它的响应内部的onSuccess-function(你已经有函数)