2010-08-16 114 views
2

時沒有違反頁面我有一個表格,我正在試圖防止重複提交,這是相當簡單的頁面(如果任何人的好奇,我用這個防止重複的表單提交,同時單擊後退按鈕

$("form").submit(function() 
{ 
    setTimeout(function() 
    { 
     $("input").attr("disabled", "disabled"); 
    }, 50); 
}); 

...這是我從this page偷了,並能正常工作正如預期的那樣,在輸入被禁止迅速,預期提交表單,用戶會被重定向

這裏是我的問題:我預計用戶使用後退按鈕有時而不是頁內導航,所以我希望頁面能夠正常工作點擊後退按鈕。但是,當我在成功發佈後單擊後退按鈕時,我將返回到前一頁,禁用所有輸入(如您可能已知會發生的情況)。我希望他們在點擊後退按鈕後能夠使用該頁面,如果他們願意的話。

我第一次嘗試使用頭文件/元標記來告訴瀏覽器不要緩存頁面,但這並不起作用(在Firefox 3.6.8中) - 然後我決定我不想這樣做,因爲它可能不會跨瀏覽器兼容,並且可能不是最佳做法(here就是這樣一種情況)。我不想使用任何能夠「斷開」後退按鈕的事情,就像我看過的一些應用程序一樣(例如,當用戶點擊它時,它不會將它們帶回頁面,而是強制它們留在該頁面上),這對我來說似乎是一個糟糕的主意。有誰知道一種方法,我可以防止重複表單提交在客戶端沒有呈現頁面無用,當用戶點擊後退按鈕? (萬一它很重要,我使用ASP.NET MVC 1)。

回答

0

好吧,這聽起來不像其他人想到一個更好的主意,併發布它。我注意到我們自己的Stack Overflow具有相同的行爲(至少在Ask Question頁面上),禁用了Submit按鈕,當我點擊「Back」時,該按鈕仍然被禁用。也許我可以做的最好的做法是禁用按鈕,從而迫使他們手動刷新頁面,或者(希望)鼓勵他們在可能的情況下使用站點導航而不是後退按鈕。

如果其他人有更好的想法,但我仍然對他們開放。

0

爲什麼不爲每個表單創建一個唯一的隨機密鑰,然後當它被提交時,將密鑰插入到數據庫中,然後如果該密鑰已經存在於數據庫中,表單已經被提交,所以不要再次處理數據......這樣你就不會修改DOM,並且可以確保數據的完整性。

+0

這是一個好主意,可以防止服務器上的表單重複處理。儘管如此,我在這個問題背後的想法是如果可能的話,阻止客戶採取行動。顯然,我們也必須在後端處理它,但我想盡量避免任何客戶端操作。 – Andy 2013-02-18 21:38:52