$ .get / $。getJSON不会延迟整个脚本的执行?

时间:2013-06-01 12:13:10

标签: php jquery ajax fullcalendar

我正在使用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来完成工作?我可以解决它吗?

2 个答案:

答案 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函数内的响应(您已经具有该函数)