前言:

现在前后端基本都是通过ajax实现前后端接口数据的交互,但是,ajax有个小小的劣势,即:不支持浏览器“后退”和“前进“键。
但是,现在我们可以通过H5的histroy属性 解决ajax在交互请求的这个小bug。
事件描述:
H5增加了一个事件window.onpopstate,当用户点击那两个按钮就会触 发这个事件。但是光检测到这个事件是不够的,还得能够传些参数,也就是说返回到之前那个页面的时候得知道那个页面的pageIndex。通过 history的pushState方法可以做到,pushState(pageIndex)将当前页的pageIndex存起来,再返回到这个 页面时获取到这个pageIndex。
window.history.pushState描述:
window.history.pushState(state, title, url);
state对象:是一个JavaScript对象,它关系到由pushState()方法创建出来的新的history实体。用以存储关于你所要插入到历史 记录的条目的相关信息。State对象可以是任何Json字符串。因为firefox会使用用户的硬盘来存取state对象,这个对象的最大存储空间为640k。如果大于这个数 值,则pushState()方法会抛出一个异常。
title:firefox现在回忽略这个参数,虽然它可能将来会被使用上。而现在最安全的使用方式是传一个空字符串,以防止将来的修改。
url:用来传递新的history实体的URL,浏览器将不会在调用pushState()方法后加载这个URL。也许会过一会尝试加载这个URL。比如在用户重启了浏览器后,新的url可以不是绝对路径。如果是相对路径,那么它会相对于现有的url。新的url必须和现有的url同域,否则pushState()将抛出异常。这个参数是选填的,如果为空,则会被置为document当前的url。
直接贴代码:
/**
* Created: Aaron.
* address: http://www.cnblogs.com/aaron-pan/
*/
//var pageIndex=window.history.state===null?0:window.history.state.page;
(function($,window,undefined){
var loadData={
pageIndex:window.history.state===null?1:window.history.state.page,
//pageIndex:0,
init:function(){
this.getData(this.pageIndex);
this.nextPage();
},
getData:function(pageIndex){
var that=this;
$.ajax({
type:'post',
url:'./data/getMovices'+pageIndex+'.json',
dataType:'json',
async:false,
success:function(data){
that.renderDom(data);
}
})
},
renderDom:function(movies){
var bookHtml=
"<table>"+
"<tr>"+
"<th>电影</th>>"+
"<th>导演</th>"+
"<th>上映时间</th>"+
"</tr>";
for(var i=0;i<movies.length;i++){
bookHtml +=
"<tr>" +
" <td>" + movies[i].moviesName + "</td>" +
" <td><a>" + movies[i].moviesEditor + "</a></td>" +
" <td>" + movies[i].times + "</td>" +
"</tr>";
}
bookHtml+="</table>";
bookHtml +=
"<button>上一页</button>" +
"<button class='nextPage'>下一页</button>";
$('body').html(bookHtml);
},
nextPage:function(){
var that=this;
$(document).on("click",".nextPage",function(){
that.pageIndex++;
that.getData(that.pageIndex);
window.history.pushState({page:that.pageIndex},null,window.location.href);
//后退and刷新回到首页 window.history.replaceState({page:that.pageIndex},null,window.location.href);
})
},
};
loadData.init();
window.addEventListener("popstate",function(event){
var page=0;
if(event.state!==null){
page=event.state.page;
console.log('page:'+page);
}
console.log('page:'+page);
loadData.getData(page);
loadData.pageIndex=page;
})
})(jQuery,window,undefined);
通过直接在html页面调用js文件就可看到运行结果。
运行结果:
这样就可以达到通过ajax进行交互也能实现监听前进/后台/刷新的功能了。
附浏览器兼容性:
以上这篇通过history解决ajax不支持前进/后退/刷新的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# ajax
# history
# JavaScript的History API使搜索引擎抓取AJAX内容
# 基于h5的history改善ajax列表请求体验
# vue history模式刷新404原因及解决方法
# vue3中关于路由hash与History的设置
# Vue中如何把hash模式改为history模式
# history保存列表页ajax请求的状态使用示例详解
# 给大家
# 就可
# 不支持
# 抛出
# 都是
# 后端
# 是一个
# 加载
# 将来
# 就会
# 有个
# 下一页
# 上一页
# 也能
# 会在
# 我们可以
# 希望能
# 相关信息
# 还得
# 这篇
相关文章:
打鱼网站制作软件,波克捕鱼官方号怎么注册?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
宝塔新建站点为何无法访问?如何排查?
如何在阿里云服务器自主搭建网站?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
表情包在线制作网站免费,表情包怎么弄?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
网站制作公司排行榜,四大门户网站排名?
招商网站制作流程,网站招商广告语?
如何在云主机上快速搭建多站点网站?
大型企业网站制作流程,做网站需要注册公司吗?
定制建站哪家更专业可靠?推荐榜单揭晓
定制建站如何定义?其核心优势是什么?
红河网站制作公司,红河事业单位身份证如何上传?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何通过IIS搭建网站并配置访问权限?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
如何打造高效商业网站?建站目的决定转化率
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
学校建站服务器如何选型才能满足性能需求?
油猴 教程,油猴搜脚本为什么会网页无法显示?
建站之星ASP如何实现CMS高效搭建与安全管理?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何快速完成中国万网建站详细流程?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
如何快速打造个性化非模板自助建站?
一键网站制作软件,义乌购一件代发流程?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
小建面朝正北,A点实际方位是否存在偏差?
如何在IIS7上新建站点并设置安全权限?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
Android自定义listview布局实现上拉加载下拉刷新功能
如何解决ASP生成WAP建站中文乱码问题?
广州建站公司哪家好?十大优质服务商推荐
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
盘锦网站制作公司,盘锦大洼有多少5G网站?
建站之星官网登录失败?如何快速解决?
建站主机选择指南:服务器配置与SEO优化实战技巧
Thinkphp 中 distinct 的用法解析
Swift开发中switch语句值绑定模式
如何基于云服务器快速搭建个人网站?
网站设计制作企业有哪些,抖音官网主页怎么设置?
如何用西部建站助手快速创建专业网站?
建站主机功能解析:服务器选择与快速搭建指南
jQuery 常见小例汇总
建站之星CMS建站配置指南:模板选择与SEO优化技巧
PHP正则匹配日期和时间(时间戳转换)的实例代码
宝塔面板创建网站无法访问?如何快速排查修复?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
*请认真填写需求信息,我们会在24小时内与您取得联系。