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


$.get/$.getJSON not delaying execution of whole script?

我使用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(你已经有函数)