我嘗試使用瀏覽器的後退和前進按鈕來處理Ajax應用程序時遇到問題。我使用jQuery History插件來啓用瀏覽器歷史記錄。啓用後退按鈕以充當Ajax應用程序中的「撤消」按鈕
該應用程序包含一頁商品。有一個排序欄,使用戶能夠通過各種值對產品進行排序。用戶可以選擇產品服裝類別(裙子,上衣,下襬,裙子等),子類別部門(裙子:迷你,馬克西,高腰,波西米亞/嬉皮等),尺寸(XS SML XL XXL XXXL),顏色(白色,黑色,灰色,藍色,紅色等)以及時代和材料。
大多數選項通過使用Ajax將最新選定的選項加載到適當的DIV中啓用。
因此,舉例來說,選擇顏色黑色,下面的代碼會被執行
$('#colorSort').load('colorSort.php?color=Black');
然後,如果用戶選擇布朗:
$('#colorSort').load('colorSort.php?color=Brown');
然後,如果用戶去選擇黑色:
$('#colorSort').load('colorSort.php?colorRemove=Black');
這工作正常,只要我們不需要支持後退/前進按鈕,但wh通過jQuery歷史記錄添加後退按鈕功能,我們遇到了問題。例如:使用我們之前的例子,用戶選擇了黑色和棕色的顏色。現在讓我們說,用戶點擊後退按鈕。用戶會希望被刪除其棕色的顏色選擇,但事實並非如此,因爲被加載的網址是:
colorSort.php?color=Black,
,而不是
colorSort.php?colorRemove=Brown
這就是它需要。
我試着通過在查詢字符串中附加一組'undo'參數來解決這個問題。例如,
colorSort.php?color=Brown//colorRemove=Brown
包含雙斜線之前的當前查詢字符串和斜線之後的「後」查詢字符串。所以使用這段代碼,如果我知道一個新的鏈接被點擊了,我可以加載當前查詢字符串(在斜線之前),並且如果我知道後退按鈕已被點擊,我可以加載斜線後面的「後退」查詢字符串。
但問題是,似乎沒有任何方法檢測後退/前進按鈕是否被點擊。 jQuery歷史記錄在hashchange事件下運行,並且該事件沒有區別(據我所知),以什麼事件觸發它。
這是我的問題。如果StackOverflow.com的超級聰明人能夠幫助我找到解決方案,我將非常感激。謝謝!
長話短說,您無法控制瀏覽器的後退和前進按鈕,即使您可以將AJAX請求存儲在瀏覽器的歷史記錄中,這也是它們異步的原因。用您自己的用戶選擇歷史來實現您自己的後退按鈕。 – Ben 2010-10-08 00:43:21
看到這個問題:http://stackoverflow.com/questions/3791466/how-do-i-know-if-the-user-clicks-the-back-button/3791492#3791492 – fehays 2010-10-08 00:49:48
正如本說,你不'無法獲得這一點。但是,您有更好的選擇:可以更改並監聽散列值的更改。圍繞這個概念構建您的頁面,您將擁有瀏覽器原生AJAX。 – treeface 2010-10-08 00:52:58