使用Ajax可以异步获取数据,可以更高效地渲染页面。

但也存在这一些问题:

再刷新页面,页面就会变成初始的状态

浏览器的前进后退功能无效

对搜索引擎的爬虫抓取不友好

1、

早前会使用浏览器的 hash锚点来解决

不同的hash标记着页面不同的部分,能修正页面刷新数据不正确的问题

再通过onhashchange事件监听hash锚点的变化,手动进行前进后退操作,浏览器支持度

Chrome

FireFox

IE

Opera

Safari

5.0

3.6(1.9.2)

8.0

10.6

5.0

2、

随后出现一种hashbang 的技术,即在url后加上标记 #!/myPath 来解决上述的问题

通过一个路径定义一个页面部分,在单页面应用中可常见到(Angular中已经封装了)。但好像只有google真正支持了对该路径的爬取

3、

HTML5的新特性做了助力,通过pushState、replaceState这两个新的history方法和 onpopstate这个window事件,解决了上述三个问题

当然,也因为是HTML5的新特性,在旧版本浏览器上支持度不好的,建议是再用hashbang的方法来兼容

本文主要讲讲pushState这几个新东西

文字太枯燥了,先看看图示直接点感受

这个栗子目的是:初始值为0,通过异步请求自增值,可以前进或后退以及刷新,新打开一个url后也能获取相应的数据

history.pushState(state, title, url)

history.replaceState(state, title, url)

其中state是个json对象,可以自定义存放一些数据,title即是这个url对应的标签title(不过好像浏览器都忽略了这个参数)

url是某个页面的标记url(操作只会改变地址栏的url,并不会立马加载这个url,可以简单的标记 ?w=a、ajaxPage.html/w=a、&w=a,只是一种标记,取值时对照着来就行)

replaceState和pushState的不同是:前者直接替换当前值,后者就是向栈中压入一个值

window.onpopstate 事件触发之后,可以通过 history.state获取到上述方法的第一个json对象

实现部分

HTML

value: 0

replacestate 后退刷新_pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新 渔人码头...相关推荐

  1. wordpressPHP实现ajax评论,wordpress无刷新评论:无需插件ajax实现wordpress comment无刷新机制...

    /** * 这个文件是从根目录下拷贝过来的comment-posts.php文件,主要功能就是提交评论,同时增加了显示出结果的功能. */ if ( 'POST' != $_SERVER['REQUE ...

  2. 谈谈HTML5中的history.pushSate方法,弥补ajax导致浏览器前进后退无效的问题

    移动端为了减少页面请求,有时候需要通过单页面做成多页面的效果,最近有这么个需求,表单填完后执行第一步,然后执行第二步,第二步执行完后再执行第三步,每一步都要保留之前的数据.这种情况用单页面实现再合适不 ...

  3. ajax实现浏览器前进后退-location.hash与模拟iframe

    为什么80%的码农都做不了架构师?>>>    Aajx实现无数据刷新时,我们会遇到浏览器前进后退失效的问题以及URL不友好的问题. 实现方式有两种 1.支持onhashchange ...

  4. Ajax弹出式无刷新城市选择特效

    为什么80%的码农都做不了架构师?>>>    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...

  5. ie8不发送ajax,IE8用ajax访问不能每次都刷新的问题

    AJAX简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. A ...

  6. ajax 页面无刷新

    <!-- 使用原生Ajax 和 $.ajax 实现局部刷新的过程 --> <!-- 封装通用XMLHttpRequest对象 --> <!DOCTYPE html> ...

  7. ajax 页面无刷新,Ajax的页面无刷新实现详解(附代码)

    这次给大家带来Ajax的页面无刷新实现详解(附代码),Ajax页面无刷新实现的注意事项有哪些,下面就是实战案例,一起来看一下. ajax (ajax开发) AJAX即"Asynchronou ...

  8. jQuery中的ajax、jquery中ajax全局事件、load实现页面无刷新局部加载、ajax跨域请求jsonp、利用formData对象向服务端异步发送二进制数据,表单序列化(异步获取表单内容)

    jQuery中使用ajax: 在jQuery中使用ajax首先需要引入jQuery包,其引入方式可以采用网络资源,也可以下载包到项目文件中,这里推荐下载包到文件中:市面上有多个版本的jQuery库,这 ...

  9. ORM中的事务和锁、Ajax异步请求和局部刷新、Ajax文件上传、日期时间类型的Json、多表查询图书系统

    一.ORM中的事务和锁 事务 事务要确保原子性 """ 事务ACID原子性:不可分隔的最小单位一致性:跟原子性是相辅相成隔离性:事务之间相互不干扰持久性:事务一旦确认永久 ...

最新文章

  1. C#实现汉字转化为拼音
  2. 如何利用计算机计算天数,如何应用Win10系统电脑中的计算器计算两个日期之间的天数?...
  3. Android发展Singleton模式
  4. 交换两个数不引入第三个变量
  5. python顺序结构实验报告_Python 数据结构 之 串 的顺序存储结构
  6. 信息学奥赛一本通 1085:球弹跳高度的计算 | OpenJudge NOI 1.5 20
  7. 高等组合学笔记(十): 分拆数恒等式, 分拆函数同余性质
  8. linux有k歌软件吗,在Linux下可用Wine安装和运行暴风影音16、全民K歌
  9. 分布式系统中的领导选举
  10. Android TV上 WebView播放视屏与TV自带画中画不兼容处理及分析
  11. 语音识别技术竟然发展如此迅速
  12. Leetcode刷题-459:重复的子字符串
  13. 方面和服务,差别大吗?
  14. Vue日历的编写,可显示周和月的模式(其中可以自定义日历里内容的显示)
  15. 互联网技术架构——画龙点睛
  16. [C#] 使用 NAudio 实现音频可视化
  17. 服务器主板显示ff,主板诊断卡代码显示ff的维修方法
  18. VBS + SendKeys 方法
  19. 30种常用管理工具模型整理分享(上)
  20. 情感天地 - 心语记事 - 印心日志 - 《缘逢境记》

热门文章

  1. A7799之STM32程序——STM32测试高精度ADC篇(二)
  2. xbox360游戏下载_Xbox Live游戏玩家API
  3. Go语言?对微信约战棋牌网站搭建新技术怎么看?
  4. 固件(Firmware)
  5. 基于python的简介以及应用知识,快做好,要发车啦(文末有个投票)
  6. 防止电脑休眠锁屏、防止休眠锁定、防止电脑休眠的小工具 —— 定时执行专家
  7. 3DS网络打开就黑屏,曲折漫长的维修
  8. 国外最好的人工智能媒体和技术博客TOP5
  9. 根据qq账号获取qq头像及拉起指定的人的qq对话框
  10. pc串口卡和plc怎么接线_计算机COM1串行口就是RS232串行口么 串行线两端的串行口与计算机和PLC怎么样的线序连接...