0

我正在使用 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 完成工作?我能修好吗?

4

2 回答 2

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
    });
});
于 2013-06-01T12:16:42.680 回答
2

getJson() 发起 AJAX 请求,这是异步的,getJSON 在发起 AJAX 请求后返回,但这并不意味着请求本身已经完成。因此,您可以交出一个 onSuccess 函数,该函数将在请求完成时使用接收到的数据调用。

如果机制不能以这种方式工作,您在发送请求时无法做任何事情 - 想象单击某处,该单击调用一个函数并以某种方式启动请求,那么一切都会等到请求完成:在收到一些响应数据之前,您甚至无法移动鼠标的最高级别 - 这根本不是用户友好的;)

通过将所有代码放在您的请求之后,解决您的问题很容易,这取决于它在 onSuccess 函数中的响应(您已经拥有该函数)

于 2013-06-01T12:28:01.417 回答