2016-04-21 56 views
0

令我驚訝,我無法找到任何有關此主題的信息,但是,搜索這樣的東西總是會產生很多類似但無關的東西......避免「撤消」歷史條目回扣表格

無論如何,一些注意事項以避免誤解: - 問題是關於HTML,HTTP,Javascript和瀏覽器行爲。我故意不談論服務器端技術,因爲我認爲製作該部分對我來說不會是一個問題。 - 我不是瞄準安全,也不想限制用戶的行爲。其實我想改進的UI。

假設我們有一個帶有POST-redirect-GET表單的HTML頁面。提交表單會導致服務器端驗證,然後是結果或驗證錯誤。現在假設需要幾次嘗試才能使所有值都有效。網址保持不變,儘管我嘗試過使用更改的網址。現在用戶查看結果,然後想要返回鏈接到表單的任何頁面。對於一個很好的用戶界面,這應該在後退按鈕上點擊2次,一次從結果頁面返回到表單,另一次返回到表單之前的頁面。但是,用戶必須點擊每次嘗試失敗才能輸入有效值。

我該如何避免這種情況?再次注意,我不想從用戶那裏「隱藏」任何東西,只是沒有實際的情況下無效的表單值是有用的。我發現一些「單頁面應用程序」由於沒有填充歷史記錄而受到相關問題的影響,但這實際上是相反的問題,而我的應用程序不是「單頁面」。

作爲一種避免歷史記錄的替代方案,我也很好地以某種方式側向解決問題,甚至圍繞它建立良好的用戶界面。但是現在,該按鈕表示「返回」(在導航的意義上),但是在表單上做了「撤消」(在改變值的意義上)。人們期望返回按鈕返回 - 他們已經有ctrl-z撤銷。

直截了當的解決方案 - 雖然我找不到那樣的東西 - 會是一個HTTP標頭,它說:「這是您之前請求的相同資源的更新版本,請注意它具有相同的URL,所以當後退按鈕時不會出現兩次「。

+0

您是指瀏覽器後退按鈕還是頁面上的鏈接? –

+0

瀏覽器後退按鈕。對於「後退」鏈接,我很明顯可以發送任何我想要的迴應。 –

回答

1

我認爲最簡單的方法是使用ajax來處理表單提交,即使它是一個多部分表單。

我會有一個客戶端驗證的組合,以給您的用戶更快的反饋,然後當您從ajax請求收到您的返回數據時處理服務器端驗證錯誤。

使用此方法,您的瀏覽器歷史記錄應相對保留,並且不會填寫成功/失敗表單提交。

我個人很喜歡這個客戶端引導驗證插件:

https://github.com/1000hz/bootstrap-validator

我還用它來更新界面時,我得到一個錯誤信息從服務器返回。

+0

聽起來不錯,雖然我在接受這個之前正在等待更多答案。作爲進一步評論者的一個說明,請不要過於詳細地進行客戶端驗證,因爲(1)這是一個相當簡單的問題,恕我直言,(2)我的服務器端框架支持AJAX表單的服務器端驗證,所以驗證本身或多或少是一個解決的問題。 –