2013-06-01 82 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函數內的響應(您已經擁有該函數)