history保存列表页ajax请求的状态使用示例详解

 更新时间:2022年12月14日 10:00:07   作者:鱼露  
这篇文章主要为大家介绍了history保存列表页ajax请求的状态使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

问题

最近碰到两个问题:

  • 从首页进入列表页之后,点击下一页的时候,使用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请求状态的资料请关注程序员之家其它相关文章!

相关文章

  • JQuery中Ajax的Post提交在IE下中文乱码的解决方法

    JQuery中Ajax的Post提交在IE下中文乱码的解决方法

    在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,在FF/Chrome中,可以正常传递中文,但是在IE下,则存在问题
    2014-05-05
  • jQuery Ajax使用心得详细整理及注意事项

    jQuery Ajax使用心得详细整理及注意事项

    jQuery Ajax相关文章想必大家在网上面已经看到了很多,本文主要目的是整理jQuery Ajax相关内容,感兴趣的朋友可以了解下,或许本文对你有所帮助
    2013-02-02
  • jQuery Ajax 实例详解 ($.ajax、$.post、$.get)

    jQuery Ajax 实例详解 ($.ajax、$.post、$.get)

    本文给大家分享jquery ajax实例文章,由于jquery在异步提交方面封装的非常好,直接用ajax非常麻烦,jquery大大简化了我们的操作,不用考虑浏览器的问题了。对jquery ajax实例相关介绍感兴趣的朋友一起学习吧
    2015-11-11
  • 用ajax实现预览链接可以看到链接的内容

    用ajax实现预览链接可以看到链接的内容

    用CSS设置预览弹出窗口的样式、用JavaScript进行服务器请求并且显示弹出窗口,需要的朋友可以参考下
    2014-08-08
  • 谈谈Ajax原理实现过程

    谈谈Ajax原理实现过程

    Asynchronous javascript and xml(ajax),实现了客户端与服务器进行数据交流过程。使用技术的好处是:不用页面刷新,并且在等待页面传输数据的同时可以进行其他操作
    2015-11-11
  • pjblog发表评论用的ajaxJS.js

    pjblog发表评论用的ajaxJS.js

    pjblog发表评论用的ajaxJS.js...
    2007-04-04
  • Ajax实现上传图像功能的示例详解

    Ajax实现上传图像功能的示例详解

    这篇文章主要介绍了如何利用Ajax实现上传图像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-04-04
  • AJAX请求队列实现

    AJAX请求队列实现

    这篇文章主要为大家详细介绍了AJAX请求队列的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • ajax简介_动力节点Java学院整理

    ajax简介_动力节点Java学院整理

    这篇文章主要为大家详细介绍了ajax基础知识点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • ajax实现文件异步上传并回显文件相关信息功能示例

    ajax实现文件异步上传并回显文件相关信息功能示例

    这篇文章主要介绍了ajax实现文件异步上传并回显文件相关信息功能,结合实例形式分析了基于jQuery $.ajax方法的文件异步上传以及后台java程序对文件信息的读取与显示相关操作技巧,需要的朋友可以参考下
    2018-06-06

最新评论

?


http://www.vxiaotou.com