手机版

pushState、replaceState、onpopstate实现Ajax页面的前向和后向刷新

时间:2021-09-12 来源:互联网 编辑:宝哥软件园 浏览:

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

但是也有一些问题:

再次刷新页面,页面将变为初始状态

浏览器的向前和向后功能无效

对搜索引擎的爬行不友好

1、

此前,浏览器的哈希锚被用来解决这个问题

不同的哈希标记页面的不同部分,可以纠正页面刷新数据不正确的问题

然后通过onhashchange事件监控哈希锚点的变化,并手动执行前向和后向操作,浏览器支持

2、

然后出现了一个hashbang技术,就是加一个mark #!/myPath解决上述问题

通过路径定义页面部分在单页应用程序中很常见(封装在Angular中)。但似乎只有谷歌真正支持沿着这条路爬行

3、

HTML5的新特性通过两种新的历史方法(pushState和replaceState)和窗口事件(onpopstate)帮助解决了上述三个问题

当然,因为是HTML5的新功能,所以老版本浏览器中的支持并不好。建议使用hashbang兼容

本文主要谈一谈pushState,一些新的东西

这篇课文太无聊了。先看图,直接感受

这个栗子的用途是:初始值为0,通过异步请求、前向或后向、刷新进行自增量,打开新的url后就可以得到相应的数据

历史。pushstate(状态、标题、url)历史记录。replacestate (state,title,URL),其中state是一个json对象,可以通过定义存储一些数据,title是这个URL对应的标签标题(虽然看起来浏览器忽略了这个参数)

Url是页面的标记url(操作只会改变地址栏的url,不会立即加载url,所以可以简单标记?W=a,ajaxPage.html/w=a, w=a,只是一个标记,取值时只需进行比较)

replaceState和pushState的区别在于前者直接替换当前值,而后者将值推入堆栈

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

实施部分

超文本标记语言

Div class=' push-state-test '输入类型=' button' id=' Ajax-test-BTN '值=' Ajax get ' pvalue 3360 span id=' Ajax-test-val ' 0/span/p/div js

Var $val=$('#ajax-test-val '),//获取当前页面的标记m=window . location . search . match(/\?val=(\ d)/);//重新进入页面,通过url中的标签初始化if(m){递增eVal(m[1]-1)的数据;}//请求函数增加val (val) {$。post ('Ajax-test.php ',{val:val},function(new val){ $ val . text(new val);//在对象中存储相关值。var state={val:newval,title :' title-'newval,URL : '?Val=' newVal}//将相关值推入历史堆栈窗口. history . pushstate window . history . pushstate(state,state.title,state . URL);});}$('#ajax-test-btn ')。click(function(){ increment eval(ParSeint($ val . text(),10));});//浏览器前后移动,触发popstate事件window . onopstate=function(){ var state=window . history . state;Console.log(state)//直接取出值,或者再次发送$val.text(state.val)的ajax请求;window . history . replace state window . history . replace state(state,state.title,state . URL);};服务器端编程语言(Professional Hypertext Preprocessor的缩写)

?PHP $ val=$ _ REQUEST[' val '];echo $ val 1;路过这里?Val=num标记不同的ajax结果页面

Tips:

使用pushState后,通过向前和向后触发popstate事件,得到对应的json对象

json对象的数据可以自定义

您可以简单地存储相关的标签并发送请求,或者直接存储标签页面对应的结果

通过向后操作,地址栏的url被更新,异步数据也被更新

要刷新页面或打开新页面,需要根据url中的标签请求数据

请记住,浏览器不会自动加载这个对应于url标签的异步内容页面,我们需要获取它

以上就是边肖介绍的pushState、replaceState、onpopstate实现Ajax页面的前向和后向刷新,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:pushState、replaceState、onpopstate实现Ajax页面的前向和后向刷新是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。