2011-08-25 101 views
0

我做我的研究,發現這個頁面:停止刷新,從重新提交表單

How do I stop the Back and Refresh buttons from resubmitting my form?

我寧願如果我能避免使用後重定向消息獲取模式,而不是在形式的一些變量的變化當我第一次提交時。但是,我不知道這將如何完成,因爲當您刷新時,您的想法是重新提交剛剛提交的表單。有什麼建議麼?

+7

你爲什麼要避免Post/Redirect/Get?這是正確的解決方案。 – thirtydot

+0

+1這是我知道的唯一解決方案 –

回答

3

這通常通過POST請求後的重定向來處理。點擊返回將重新將用戶重定向。我知道你提到你想避免這種情況,但我看不到任何有效的原因。

1

使用表單在隱藏字段中發送唯一表單標識符,例如UUID。跟蹤您已經看到的UUID(可能是每個會話,因此您的數據庫不會無限增長或需要偶爾修剪)並默默忽略重新提交。

+0

或緩存提交結果並返回當您獲得已經看到的uuid時緩存的內容 – ysth

2

當瀏覽器被告知刷新時,它會重新發送它發送的最後一個請求。如果最後發送的請求是表單提交,那麼表單將被重新提交。這是沒有辦法的,因爲這就是模型的工作原理。

以避免意外的效果,你必須要麼:

  • 後期使用重定向消息獲得,從而使最後一個請求(即被重新發送的一個)將是一個讀取的結果你表單提交而不是表單提交本身 或
  • 在表單中放置一個標識符,以便服務器可以忽略重新提交(雖然用戶仍然會看到「是否要重新提交?」確認)

我不是意識到任何其他選擇,並且鑑於「更新」的作用方式,我真的不知道還有其他方法。在這兩種選擇中,post-redirect-get提供了最清晰的用戶體驗,並且是HTTP動詞在理論上最「純」的用法,所以它通常是首選,而IMO是正確的解決方案。

+0

解釋得很好!給了我很多見解,並將我從節點中的「渲染」轉變爲簡單的重定向 – David