我在構建或多或少的Google日曆,但具有更多特定的功能/特性。像Google日曆一樣,當用戶點擊一個事件時,我用ajax get請求填充一個「彈出」div。填充該div的html包含特定於查看事件的javascript函數。當用戶完成使用彈出窗口時,無論他們關閉它還是保存更改,我都會在隱藏它之前清除其中的html。
現在的問題: 對某個事件有兩個步驟的創建過程在日曆上 1)用戶點擊創建一個臨時,可移動的,可調整大小的事件,它進入的地方,點擊它去看確認彈出窗口,確認後調用服務器在數據庫中創建事件。
//(start) and (end) are unix timestamps for the beginning and end of the new event
$.getJSON("/events/add/(start)/(end)", function(data) {
//server returns whether or not the add was successful...
});
現在,一旦它被確認,並且服務器沒有任何保存新的事件的問題,在彈出的HTML被刪除,彈出的是隱藏的,並從服務器的日曆重新提取事件。就像它應該一樣,這個新事件現在正從數據庫提供給日曆。
當數據庫版本的用戶點擊,我填充彈出與view.ctp(我使用CakePHP),其中包括一個取消按鈕和一個JavaScript函數「取消()」
這是我在哪裏丟失: 我知道按鈕正在調用函數,我已經測試了幾種不同的方式。在函數是另一個的getJSON請求......
$.getJSON("/events/cancel/(eventId)", function(data) {
//server returns whether or not cancellation was successful
});
如果我刷新頁面,取消按預期工作,但如果我嘗試創建後立即取消事件(沒有先刷新頁面)而不是被調用的「/ events/cancel /(eventId)」url,「/ events/add /(start)/(end)」被再次調用。
獲取JSON數據沒有問題(當調用正確的url時)。事實上,如果您嘗試添加與現有事件重疊的事件,它返回的錯誤消息就是您所期望的。
同樣,我知道正在調用正確的JavaScript函數,並且我知道每個服務器端函數都可以正常工作。僅僅是因爲我不明白的原因,調用了錯誤的URL。
對不起,我想寫一個這樣的故事,我希望我已經包含了足夠的信息。我不認爲這是我的代碼中的問題 - 就像我所提到的,頁面刷新可以防止這個問題。
我試着將jquery的緩存設置爲false。我試過重命名和重定位我的JavaScript函數,以防止任何潛在的重疊。我嘗試將$ .getJSON改爲$ .get,但問題每次都是一樣的。
這是很好的解釋事情徹底,但要得到真正有用的幫助,你會想顯示(很多)更多的代碼。 –