讓瀏覽器記住ajax請求並能前進和後退方法(一)

在我們瀏覽不同網頁的時候,我們可以通過瀏覽器的前進、後退鍵來去到我們前後訪問過的頁面。這都有一個共同點,就是
瀏覽器地址欄的地址改變了。瀏覽器自身維護了一個記錄用戶訪問頁面歷史的棧,棧中記錄了用戶訪問不同頁面的先後順序。
但是在開發中,我們經常會用到ajax技術去提升網頁的用戶體驗。但是ajax本身並不改變瀏覽器地址欄中的url,是在同一個
網頁內部操作的,這時,瀏覽器並不會記錄ajax請求的記錄。在這種情況下,用戶在一個頁面觸發的5次ajax請求後,點了後
退按鈕,瀏覽器不會再次請求之前的ajax請求,而是返回了上一頁。

解決這個問題的第一種方法就是利用location的hash值。當url的hash值改變時,頁面並不會跳轉,但是瀏覽器此時會將此
帶hash的url記錄到歷史記錄中。利用這個特性,我們可以人爲的模擬帶歷史記錄功能的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>

先創建兩個按鈕,點擊按鈕時,向服務器發送請求,並將data-id通過參數帶到服務器,服務器返回對應data-id的結果。
於此同時,改變按鈕狀態,並將location的hash值改爲data-id的值。最後監聽location的hash值變化,重複上述步驟。

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;
});

當我們點擊按“1-2-1”這樣的順序點擊按鈕時,控制檯的輸出如下

recived data:1
recived data:2
recived data:2

此時我們連續按三次返回按鈕,控制檯輸出如下

recived data:1
recived data:2
recived data:1

可見這樣就模擬實現了瀏覽器記錄ajax請求的功能。

原文出處:http://www.foreverpx.cn

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章