2009-08-14 44 views
1

我正在使用這種技巧,您將一些數據以隱藏形式存儲以便能夠保留它,以便當用戶從頁面導航離開,然後使用BACK按鈕返回時,我可以將數據恢復到頁面沒有再次點擊服務器...如何在頁面重新加載時清除HTML表單,但在用戶導航回到頁面時不能清除?

但是,這個竅門意味着當用戶點擊刷新或重新加載時(甚至在Firefox中移位重載),也會發生同樣的事情。我想要檢測到用戶正在點擊重新加載而不是點擊後退按鈕,以便我可以重新加載時重新開始,但仍然可以在用戶導航離開和返回時恢復以前的數據。

有沒有辦法做到這一點?我一直在調查onbeforeunload事件等,但還沒有想出任何東西。

編輯以解決「爲什麼?」 Josh的問題:

的頁面是與一羣AJAX過濾器的搜索結果頁面。用戶可能花費相當多的時間調整篩選器以獲得他們想要的搜索結果集合...然後,如果他們要麼從頁面上點擊離開,要麼在URL欄中輸入新地址...然後回到頁面,如果我不這樣做,他們將不得不從頭開始並再次進行所有的過濾。對於我們進行可用性測試的用戶來說,這是一次非常令人沮喪的體驗。

這是一種技術精明的用戶可能通過打開新選項卡而不是點擊/打字離開而解決的問題,但不幸的是,我們絕大多數的用戶不是技術高明的,所以顯而易見的解決方案是該頁面在用戶導航回頁面時恢復過濾器/結果。

在另一方面,也有我能想到的,爲什麼用戶會重新載入頁面有兩個原因:

  1. 在搜索頁面上的結果一個時間敏感的元素在其中,並且用戶可能希望以獲得更多最新的結果。
  2. 偶爾會出現頁面未正確加載的錯誤。在這兩種情況下,如果我將頁面恢復到保存狀態,它們將得到相同的(舊的和/或破損的)結果,而不是他們期望的新的/固定的結果。

希望清除它。

回答

0

當我加載頁面中的表單時,我填寫了之前存儲的值,但之後清除了會話中的數據。第二次頁面刷新將找不到存儲的數據並提供空白表單。如果表單被重新提交,那麼我將新數據存儲回會話中,準備好後退按鈕...

+0

的問題是,這個(隱藏)形式從未提交 - 只得到從JavaScript寫入數據(序列化對象圖以它爲用戶與頁面交互),它總是被頁面加載重新加載,如果它是有... – John 2009-08-14 20:50:47

2

您也許可以在服務器端通過查看與請求一起發送的標頭。用戶執行刷新或硬刷新時會使用某些標頭。

使用Fiddler或Firebug檢查標題以查看可以使用的標題。

對於Firefox至少,按F5導致發送一個

Cache-Control: max-age=0 

報頭。做一個按Ctrl-F5發送這些

Pragma: no-cache 
Cache-Control: no-cache 

對於其他瀏覽器的行爲明細信息,請this excellent answer另一個問題。

+0

這是有趣......它看起來像它可能是一個痛苦,因爲我必須逐個處理所有不同的瀏覽器,但我會進一步調查。 – John 2009-08-14 20:51:37

1

如果你不能得到表單式的工作方式,您可能需要調查一個「AJAX歷史」圖書館像RSH