2013-06-01 17 views
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完成作业?我能解决它吗?

+0

$ .getJSON是AJAX,AJAX是异步的! –

+1

解决方法是重构您的脚本以允许Ajax调用的异步性质。无论你在'$ .getJSON()'应该在'$ .getJSON()'回调函数中调用哪一个函数。 – nnnnnn

回答

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 
    }); 
}); 
2

的getJSON()发起一个AJAX请求,这是异步的,的getJSON发起AJAX请求后返回,但并不表示该请求本身已经完成了。因此,您可以交出一个onSuccess功能,当请求完成时,将使用接收的数据调用该功能。

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

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