亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

history保存列表頁ajax請求的狀態使用示例詳解

瀏覽:186日期:2022-06-12 08:16:33
目錄
  • 問題
    • 優化前代碼
  • history
    • history.pushState()
    • window.onpopstate
  • 問題2

    問題

    最近碰到兩個問題:

    • 從首頁進入列表頁之后,點擊下一頁的時候,使用ajax請求更新數據, 然后點擊瀏覽器“后退”按鈕就直接返回到首頁,實際這里想要的效果是返回列表頁上一頁。
    • 在列表頁分頁為2的頁面進入詳情頁,然后點擊“后退”按鈕,返回的事列表頁分頁為1的頁面。沒法記住之前分頁狀態。

    優化前代碼

    代碼如下,在頁數變化的時候,去異步請求數據,渲染頁面。

    const currentChange = (currentPage) => {
        ajax(`請求地址/${currentPage}`)
        .then(renderPage)
    }
    

    history

    經過幾番搜索,發現可以用History 接口來實現我們想要功能。

    history.pushState()

    按指定的名稱和URL(如果提供該參數)將數據push進會話歷史棧,數據被DOM進行不透明處理;你可以指定任何可以被序列化的javascript對象。具體描述可以參考文檔

    通過history.pushState(state, title, url)可以修改會話歷史棧,把我們需要保存的數據存到state中,這里我們存入一個對象,屬性為當前頁數;title一般沒什么用,這里傳入null;url會修改當前歷史紀錄的地址,瀏覽器在調用pushState()方法后不會去加載這個URL

    假設當前currentPage為1,當前url為www.example.com/search/index

    ...
    const pushState = () => {
        const url = `/search/index/${currentPage}`
        history.push({
    page: currentPage
        }, null, url)
    }
    const currentChange = (currentPage) => {
        ajax(`請求地址/${currentPage}`)
        .then(res =>{
    pushState(currentPage)
    renderPage()
        })
    }
    ...
    

    現在代碼執行順序是:頁數改變 => ajax請求 => pushState => renderPage()

    在pushState之后當前url變成www.example.com/search/index/1

    window.onpopstate

    現在我們通過history.pushState()方法把狀態存入歷史會話中了,接下來就要監聽window.onpopstate事件

    參考mdn文檔window.onpopstate

    每當處于激活狀態的歷史記錄條目發生變化時,popstate事件就會在對應window對象上觸發.

    調用history.pushState()或者history.replaceState()不會觸發popstate事件. popstate事件只會在瀏覽器某些行為下觸發, 比如點擊后退、前進按鈕(或者在JavaScript中調用history.back()、history.forward()、history.go()方法).

    接下來監聽這個事件

    window.addEventListener("popstate", (event) => {
    	if(event.state !== null){
    	    page = event.state.page
    	    changeCurrentPage(page) // 修改當前頁數
    	}
    })
    

    當popstate觸發時,會修改當前頁數,然后觸發之前定義的currentChange方法,更新數據,渲染頁面。

    問題2

    到此為止,問題1就解決了。

    接下來要解決問題二:從詳情頁返回列表頁,記住之前的狀態
    這里我用url來記錄狀態,之前pushState推入的url就派上用場了。 只要把進入頁面首次請求的地址改成當前url就可以了

    假設之前push的url為www.example.com/search/index/5,從詳情頁返回之后url還會顯示www.example.com/search/index/5

    mounted () {
        ajax(location.href)
    }
    

    這樣就完成了。 當然如果你的狀態比較復雜,可以把數據存入本地Storage,添加一些判斷即可

    以上就是history保存列表頁ajax請求的狀態使用示例詳解的詳細內容,更多關于history保存列表頁ajax請求狀態的資料請關注其它相關文章!

    標簽: Ajax
    主站蜘蛛池模板: 九九九精品视频免费 | 国产精品秒播无毒不卡 | 狠狠久久综合 | 国产视频播放 | 在线看免费观看韩国特黄一级 | 两性毛片 | 亚洲欧美成人综合在线 | 日本免费在线一区 | 日本香蕉一区二区在线观看 | 嗯啊在线观看免费影院 | 国产精品19禁在线观看2021 | 激情婷婷成人亚洲综合 | 国产在线精品一区二区高清不卡 | 亚洲综合色婷婷六月丁香 | 亚洲欧美日韩国产精品网 | 国产真实偷乱视频在线观看 | 欧美日韩亚洲第一页 | 国产老妇一性一交一乱 | 久久99热这里只频精品6中文字幕 | 免费在线观看成人 | 久久久久国产亚洲日本 | 国产精品成人网 | 超级最爽的乱淫片免费 | 亚洲精品成人一区 | 久久青草91免费观看 | 黄色国产一级片 | 欧美黄网站 | 91午夜精品亚洲一区二区三区 | 亚洲综合欧美色综合小说 | 色花堂的网站地址 | zzji国产精品视频 | 日韩免费观看的一级毛片 | 边做边摸边揉的免费视频 | 欧美人成人亚洲专区中文字幕 | 乱色视频中文字幕 | 色人影院 | 制服丝袜 自拍偷拍 | 亚洲国产日韩在线观频 | 亚洲综合区小说区激情区噜噜 | 香蕉视频在线免费播放 | 最新欧美一级视频 |