2012-05-15 70 views
0

我在構建或多或少的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,但問題每次都是一樣的。

+3

這是很好的解釋事情徹底,但要得到真正有用的幫助,你會想顯示(很多)更多的代碼。 –

回答

0

調試步驟是將其更改爲

var url = "/events/cancel/(eventId)"; 
alert(url); 
$.getJSON(url, function(data) { 
    //server returns whether or not cancellation was successful 
}); 
+0

剛剛嘗試過,我早些時候嘗試了其他類似的東西。它提醒所需的網址,然後以某種方式只是調用/事件/添加任何... – idmwsls

0

again, i know the right js function is being called

你怎麼驗證呢?

這可能是由許多因素造成的。它的大部分是由於一些流浪點擊處理程序,它通常可以得到由做

$('.cancel').unbind('click').click() 

或Live擺脫時間/死等同。

一旦你過去了,console.log該函數中的每一步找出URL正在被改變的地方。從$.getJSON請求開始。如果這是一個不正確的網址,請向上移動,直到達到網址切換的地步。

你不能僅僅因爲它在刷新上工作就免除代碼,尤其是當你添加一個事件時可能會發生各種各樣的事情。

更多代碼將是有幫助的。

+0

我證實它通過把alert()的遍及它調用正確的功能在不同的點。你對於豁免我的代碼非常正確,我想我只是想知道我做錯了什麼,我的上帝是一個新手的錯誤! – idmwsls

0
$.getJSON('/events/add/'+ start +'/'+ end, function(data) { 

}); 

$.getJSON('/events/cancel/'+eventId, function(data) { 

});