最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pushState、replaceState、onpopstate 實現(xiàn)Ajax頁面的前進(jìn)后退刷新

 更新時間:2016年11月10日 14:12:21   作者:imwtr  
這篇文章主要介紹了pushState、replaceState、onpopstate 實現(xiàn)Ajax頁面的前進(jìn)后退刷新的相關(guān)資料,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

使用Ajax可以異步獲取數(shù)據(jù),可以更高效地渲染頁面。

但也存在這一些問題:

再刷新頁面,頁面就會變成初始的狀態(tài)

瀏覽器的前進(jìn)后退功能無效

對搜索引擎的爬蟲抓取不友好

1、

早前會使用瀏覽器的 hash錨點 來解決

不同的hash標(biāo)記著頁面不同的部分,能修正頁面刷新數(shù)據(jù)不正確的問題

再通過 onhashchange 事件監(jiān)聽hash錨點的變化,手動進(jìn)行前進(jìn)后退操作,瀏覽器支持度

2、

隨后出現(xiàn)一種 hashbang 的技術(shù),即在url后加上標(biāo)記 #!/myPath 來解決上述的問題

通過一個路徑定義一個頁面部分,在單頁面應(yīng)用中可常見到(Angular中已經(jīng)封裝了)。但好像只有g(shù)oogle真正支持了對該路徑的爬取

3、

HTML5的新特性做了助力,通過pushState、replaceState 這兩個新的history方法和 onpopstate 這個window事件,解決了上述三個問題

當(dāng)然,也因為是HTML5的新特性,在舊版本瀏覽器上支持度不好的,建議是再用hashbang的方法來兼容

本文主要講講pushState這幾個新東西

文字太枯燥了,先看看圖示直接點感受

這個栗子目的是:初始值為0,通過異步請求自增值,可以前進(jìn)或后退以及刷新,新打開一個url后也能獲取相應(yīng)的數(shù)據(jù)

history.pushState(state, title, url)
history.replaceState(state, title, url)

其中state是個json對象,可以自定義存放一些數(shù)據(jù),title即是這個url對應(yīng)的標(biāo)簽title(不過好像瀏覽器都忽略了這個參數(shù))

url是某個頁面的標(biāo)記url(操作只會改變地址欄的url,并不會立馬加載這個url,可以簡單的標(biāo)記 ?w=a、ajaxPage.html/w=a、&w=a,只是一種標(biāo)記,取值時對照著來就行)

replaceState和pushState的不同是:前者直接替換當(dāng)前值,后者就是向棧中壓入一個值

window.onpopstate 事件觸發(fā)之后,可以通過 history.state獲取到上述方法的第一個json對象

實現(xiàn)部分

HTML

<div class="push-state-test">
<input type="button" id="ajax-test-btn" value="Ajax獲取">
<p>value: <span id="ajax-test-val">0</span></p>
</div>

JS

var $val = $('#ajax-test-val'),
// 獲取當(dāng)前頁面的標(biāo)記
m = window.location.search.match(/\?val=(\d+)/);
// 新進(jìn)入頁面,通過url中的標(biāo)記初始化數(shù)據(jù)
if (m) {
increaseVal(m[1] - 1);
}
// 請求
function increaseVal(val) {
$.post('ajax-test.php', {
val: val
}, function(newVal) {
$val.text(newVal);
// 存儲相關(guān)值至對象中
var state = {
val: newVal,
title: 'title-' + newVal,
url: '?val=' + newVal
}
// 將相關(guān)值壓入history棧中
window.history.pushState && window.history.pushState(state, state.title, state.url);
});
}
$('#ajax-test-btn').click(function() {
increaseVal(parseInt($val.text(), 10));
});
// 瀏覽器的前進(jìn)后退,觸發(fā)popstate事件
window.onpopstate = function() {
var state = window.history.state;
console.log(state)
// 直接將值取出,或再次發(fā)個ajax請求
$val.text(state.val);
window.history.replaceState && window.history.replaceState(state, state.title, state.url);
};

PHP

<?php
$val = $_REQUEST['val'];
echo $val + 1;
?>

這里通過?val=num 的方式,標(biāo)記了不同的ajax結(jié)果頁

Tips:

使用pushState之后,當(dāng)前進(jìn)后退觸發(fā)了popstate事件,獲取到相應(yīng)的json對象

json對象的數(shù)據(jù)可自定義

可簡單地存儲相關(guān)標(biāo)記再發(fā)個請求,或者直接將該標(biāo)記頁對應(yīng)的結(jié)果直接存起來

隨著后退操作,地址欄url得到了更新,異步的數(shù)據(jù)也得到了更新

刷新頁面或新打開頁面,就要根據(jù)url中的標(biāo)記去請求數(shù)據(jù)了

要記住的是,瀏覽器并不會自動加載url這部分標(biāo)記對應(yīng)的這個異步內(nèi)容頁,需要我們?nèi)カ@取

以上所述是小編給大家介紹的pushState、replaceState、onpopstate 實現(xiàn)Ajax頁面的前進(jìn)后退刷新,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Ajax在請求過程中顯示進(jìn)度的簡單實現(xiàn)

    Ajax在請求過程中顯示進(jìn)度的簡單實現(xiàn)

    ajax技術(shù)在web應(yīng)用中使用非常頻繁,本文以asp.net MVC為示例,提供一種簡單的實現(xiàn)方式。ajax在請求過程中顯示進(jìn)度條,是怎么實現(xiàn)的呢?本文通過代碼和文字說明相結(jié)合的方式分享給大家。
    2015-09-09
  • 一個封裝的Ajax類

    一個封裝的Ajax類

    一個封裝的Ajax類...
    2007-03-03
  • 比getjson好的底層函數(shù)是哪個有什么優(yōu)點

    比getjson好的底層函數(shù)是哪個有什么優(yōu)點

    比getjson好的底層函數(shù)優(yōu)點在于如果網(wǎng)絡(luò)出問題了,可以通過error方法來告訴用戶出錯,需要的朋友可以參考下
    2014-02-02
  • 原生ajax調(diào)用數(shù)據(jù)實例講解

    原生ajax調(diào)用數(shù)據(jù)實例講解

    這篇文章主要向大家介紹了原生ajax調(diào)用數(shù)據(jù)實例,具有一定的參考價值,感興趣的朋友可以參考一下
    2016-01-01
  • ajax瀏覽器兼容的問題探討

    ajax瀏覽器兼容的問題探討

    ajax瀏覽器兼容的問題一直都是同學(xué)們多煩惱的,下面有個不錯的示例大家可以參考下,希望對大家有所幫助
    2014-01-01
  • 使用ajax操作 JavaScript 對象

    使用ajax操作 JavaScript 對象

    這篇文章主要介紹了使用ajax操作 JavaScript 對象方法的相關(guān)資料,需要的朋友可以參考下
    2015-01-01
  • ajax實現(xiàn)省市三級聯(lián)動效果

    ajax實現(xiàn)省市三級聯(lián)動效果

    這篇文章主要為大家詳細(xì)介紹了ajax實現(xiàn)省市三級聯(lián)動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 編寫輕量ajax組件第三篇實現(xiàn)

    編寫輕量ajax組件第三篇實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了輕量ajax組件編寫第三篇實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 如何解決ajax在google chrome瀏覽器上失效

    如何解決ajax在google chrome瀏覽器上失效

    今天閑著沒事做個一個ajax小練習(xí),困擾了我很長時間,我寫的ajax代碼在ie、360、火狐瀏覽器上運行都是正常的,而在google chrome下無法正常運行,搞的我焦頭爛額,最終找到解決辦法,在此分享給大家,幫助那些遇到和我一樣問題的朋友
    2015-10-10
  • html+ajax實現(xiàn)上傳大文件功能

    html+ajax實現(xiàn)上傳大文件功能

    這篇文章主要為大家詳細(xì)介紹了html+ajax實現(xiàn)上傳大文件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論

广汉市| 永年县| 万载县| 新乐市| 九江县| 贞丰县| 盐源县| 马山县| 孝感市| 信丰县| 朝阳市| 长岭县| 岳普湖县| 伊春市| 尤溪县| 博爱县| 新邵县| 宿迁市| 若羌县| 阳山县| 肇庆市| 富裕县| 府谷县| 伊吾县| 成都市| 莱芜市| 青河县| 团风县| 报价| 汉源县| 嘉定区| 盐池县| 枝江市| 酉阳| 平昌县| 红桥区| 民权县| 敦煌市| 修武县| 沐川县| 石嘴山市|