2011-12-17 81 views
3

我的一位同事正在努力防止重複表單提交(成功提交後,我們通過電子郵件發送並創建了一個數據庫條目)。如果表單中存在錯誤,提交內容不會成功。POST無重定向/ GET?

我檢討自己的代碼,我注意到,他只用P/R/G上成功提交。如果不成功,表單提交將在刷新/重新訪問時重複。我在我的評論中注意到了這一點,但他認爲他沒有看到每次重定向的好處,因爲不成功的提交被忽略。我注意到,如果用戶刷新頁面或在歷史中重新訪問頁面,他們仍然會在主要瀏覽器中收到「確認表單重新發送」警告。

難道這還不夠的原因,每一個職位後重定向?不管它是否,是否有任何其他理由在POST後重定向,即使提交是冪等的(由於表單中的錯誤)?在提交表單提交後,是否有任何原因應該而不是重定向?

+2

我個人發出303 *後從瀏覽器中的每一個POST *,因爲我*不要*希望有一個「確認的形式重新提交」,永遠。我會自己處理。我認爲這是最佳做法,其他人可能會不同意,所以這不是一個答案。有一點關於這一點,我通常使用會話 - 這使得傳遞錯誤消息等返回到瀏覽器更容易,這不符合REST,所以它取決於您的要求。 – DaveRandom 2011-12-17 16:36:36

回答

3

主要原因是由於在POST操作後點擊「返回」或「重新加載」按鈕(以及人們常常,無論您是否希望它們),每個現代瀏覽器的令人討厭的對話框都會打開,警告您POST重新提交即將發生。我當然明白他們爲什麼選擇這樣做,但這確實意味着作爲程序員,我們會竭盡全力確保用戶不必看到消息。

所以,我不同意那些誰說,沒有理由不成功後門柱重定向。理論上不應該有一個,是的,但由於瀏覽器的用戶界面問題,是的,絕對需要。

0

沒有理由不成功的POST之後重定向。重複此操作不會造成任何傷害,它使您的生活更輕鬆,因爲您無需在會話中存儲所有表單值以重新填寫表單。

除此之外,在開發過程中使用的文件上傳字段的時候,因爲你可以使表單提交總是失敗,然後按F5鍵,直到所有的驗證代碼等工作正常,它使事情更容易更是如此。

+0

你也可以不重定向,而你的表單提交總是失敗。 – 2011-12-17 16:46:43

+0

然後你需要代碼來在兩個地方渲染表單。 – ThiefMaster 2011-12-17 19:34:57