全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

通过history解决ajax不支持前进/后退/刷新的问题

前言:

现在前后端基本都是通过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小时内与您取得联系。