解決瀏覽器記住ajax請求并能前進(jìn)和后退問題
在我們?yōu)g覽不同網(wǎng)頁的時(shí)候,我們可以通過瀏覽器的前進(jìn)、后退鍵來去到我們前后訪問過的頁面。這都有一個(gè)共同點(diǎn),就是 瀏覽器地址欄的地址改變了。瀏覽器自身維護(hù)了一個(gè)記錄用戶訪問頁面歷史的棧,棧中記錄了用戶訪問不同頁面的先后順序。
但是在開發(fā)中,我們經(jīng)常會(huì)用到ajax技術(shù)去提升網(wǎng)頁的用戶體驗(yàn)。但是ajax本身并不改變?yōu)g覽器地址欄中的url,是在同一個(gè)網(wǎng)頁內(nèi)部操作的,這時(shí),瀏覽器并不會(huì)記錄ajax請求的記錄。在這種情況下,用戶在一個(gè)頁面觸發(fā)的5次ajax請求后,點(diǎn)了后 退按鈕,瀏覽器不會(huì)再次請求之前的ajax請求,而是返回了上一頁。
解決這個(gè)問題的第一種方法就是利用location的hash值。當(dāng)url的hash值改變時(shí),頁面并不會(huì)跳轉(zhuǎn),但是瀏覽器此時(shí)會(huì)將此帶hash的url記錄到歷史記錄中。利用這個(gè)特性,我們可以人為的模擬帶歷史記錄功能的ajax請求。下面是這種方法的demo。
ul{ margin:0; padding:0; } li{ list-style: none; display: block; float: left; border: 1px solid #000; padding: 10px; margin-right: 20px; cursor: pointer; } li.active{ background-color: #000000; color: #fff; } <ul> <li data-id="1">1</li> <li data-id="2">2</li> </ul>
先創(chuàng)建兩個(gè)按鈕,點(diǎn)擊按鈕時(shí),向服務(wù)器發(fā)送請求,并將data-id通過參數(shù)帶到服務(wù)器,服務(wù)器返回對應(yīng)data-id的結(jié)果。
于此同時(shí),改變按鈕狀態(tài),并將location的hash值改為data-id的值。最后監(jiān)聽location的hash值變化,重復(fù)上述步驟。
function sendAjax(hash){ console.log("recived data:" + hash); } function btnStatus(hash){ $("li").removeClass('active'); $("li[data-id="+hash+"]").addClass('active'); } function onHashChange(){ var curHash = window.location.hash.replace("#",""); if(curHash){ btnStatus(curHash); sendAjax(curHash); } } window.onhashchange = onHashChange; $("li").click(function(){ var id = $(this).attr('data-id'); window.location.hash = id; });
當(dāng)我們點(diǎn)擊按“1-2-1”這樣的順序點(diǎn)擊按鈕時(shí),控制臺的輸出如下
recived data:1 recived data:2 recived data:2
此時(shí)我們連續(xù)按三次返回按鈕,控制臺輸出如下
recived data:1 recived data:2 recived data:1
可見這樣就模擬實(shí)現(xiàn)了瀏覽器記錄ajax請求的功能。
以上所述是小編給大家介紹的讓瀏覽器記住ajax請求并能前進(jìn)和后退方法(一),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
H5移動(dòng)開發(fā)Ajax上傳多張Base64格式圖片到服務(wù)器
這篇文章主要為大家詳細(xì)介紹了H5移動(dòng)開發(fā)Ajax上傳多張Base64格式圖片到服務(wù)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Ajax二級聯(lián)動(dòng)菜單實(shí)現(xiàn)原理及代碼
二級聯(lián)動(dòng)菜單,一個(gè)多么方便且實(shí)用的用戶交互功能,有需求的朋友可以參考下本文,或許對你的菜單知識深入學(xué)習(xí)有幫助,好了,閑話不多說,看代碼吧2013-01-01AJAX POST數(shù)據(jù)中有特殊符號(轉(zhuǎn)義字符)導(dǎo)致數(shù)據(jù)丟失的解決方法
這篇文章主要介紹了Ajax發(fā)送轉(zhuǎn)義字符 、>、<、"接收數(shù)據(jù)不全問題,需要的朋友可以參考下2023-06-06Ajax實(shí)現(xiàn)表格中信息不刷新頁面進(jìn)行更新數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Ajax實(shí)現(xiàn)表格中的信息不刷新頁面進(jìn)行更新數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10ajax交互Struts2的action(客戶端/服務(wù)器端)
本文為大家探討下ajax交互Struts2的action并有客戶端及服務(wù)器端代碼,感興趣的朋友可以參考下,希望對大家有所幫助2013-08-08Axios和Ajax的區(qū)別是什么(詳細(xì)介紹)
ajax技術(shù)實(shí)現(xiàn)了局部數(shù)據(jù)的刷新,axios實(shí)現(xiàn)了對ajax的封裝,axios有的ajax都有,ajax有的axios不一定有,總結(jié)一句話就是axios是ajax,ajax不止axios,本文對Axios和Ajax的區(qū)別是什么給大家講解的非常詳細(xì),需要的朋友一起看看吧2023-10-10