我正在使用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来完成工作?我可以解决它吗?
答案 0 :(得分:2)
$.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
});
});
答案 1 :(得分:2)
getJson()启动一个AJAX请求,它是异步的,getJSON在启动AJAX请求后返回,但这并不意味着请求本身已经完成。因此,您可以移交onSuccess函数,该函数将在请求完成时使用接收到的数据进行调用。
如果机制不能以这种方式工作,那么在发送请求时你无法做任何事情 - 想象点击某个地方,点击会调用一个函数并以某种方式启动请求,然后一切都会等到请求结束完成:在最高级别,你甚至不能移动你的鼠标,直到你收到一些响应数据 - 这根本不是用户友好的;)
通过在请求之后放置所有代码来解决您的问题很容易,这取决于它在onSuccess函数内的响应(您已经具有该函数)