美文网首页
ajax与前进后退

ajax与前进后退

作者: 寒梁沐月 | 来源:发表于2017-07-02 20:55 被阅读123次

Ajax可以实现页面的无刷新操作但是,也会造成另外的问题,无法前进与后退,
如果想既可以使用ajax做数据传输右想实现前进后退该怎么办??

1 .利用location.hash

location.hash可以取到或者设置hash的值,当hash改变的时候window.onhashchange事件会被触发,但是页面加载的时候哪怕有hash值,onhashchange事件也不会触发,因此需要在onload事件中也读取hash进行同样的处理,保证刷新页面也能恢复ajax的页面显示。

测试代码如下
<!DOCTYPE html>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
    <title></title>  
    <script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>  
    <script type="text/javascript">  
        var processHash = function () {  
            var hashStr = location.hash.replace("#", "");  
            if (hashStr) $("#test").html(hashStr);  
        }  
        $(function () {  
            $("#test").click(function () {  
                var i = parseInt($("#test").html());  
                i++;  
                $("#test").text(i);  
   
                location.hash = "#" + i;  
            });  
            window.onload = processHash;  
            window.onhashchange = processHash;  
        });  
    </script>  
</head>  
   
<body>  
   <span id="test">1</span>
</body>  
</html>  

2.利用HTML5 history pushState/replaceState

history.state

当前URL下对应的状态信息。如果当前URL不是通过pushState或者replaceState产生的,那么history.state是null。

history.pushState(state, title, url)

将当前URL和history.state加入到history中,并用新的state和URL替换当前。不会造成页面刷新。

  • state:与要跳转到的URL对应的状态信息。
  • title:页面的题目,假如没有就穿空字符串就可以。
  • url:要跳转到的URL地址,不能跨域。

history.replaceState

用新的state和URL替换当前。不会造成页面刷新。

  • state:与要跳转到的URL对应的状态信息。
  • title:页面的题目,假如没有就穿空字符串就可以。
  • url:要跳转到的URL地址,不能跨域。

window.onpopstate

history.go和history.back(包括用户按浏览器历史前进后退按钮)触发,并且页面无刷的时候(由于使用pushState修改了history)会触发popstate事件,事件发生时浏览器会从history中取出URL和对应的state对象替换当前的URL和history.state。通过event.state也可以获取history.state。

支持性判断

if ('pushState' in history) {...}

相关文章

  • ajax与前进后退

    Ajax可以实现页面的无刷新操作但是,也会造成另外的问题,无法前进与后退,如果想既可以使用ajax做数据传输右想实...

  • 解决ajax无法后退问题实例

    都知道ajax有一个明显的缺点就是与浏览器的history.back()与forward()不友好,不能前进与后退...

  • JS 客户端API 之 history pushState/ r

    History使用back(), forward(), Go() 可以在用户历史记录中前进和后退。 Ajax + ...

  • Ajax与pushState

    众所周知,Ajax可以实现网页的局部刷新,但与此同时,Ajax会破坏浏览器历史的前进后退。为了让Ajax也能支持浏...

  • 关于history.pushState()和popstate和r

    上一篇用location.hash实现ajax前进后退功能,本文采用history.pushState()和pop...

  • 观念前进与后退

    看到这段话虽然不是特别清晰的明白,但是感觉说的很对。「这个口子一开,那还了得。」(刚才看到某热门话题的一则评论。 ...

  • 后退前进

    毕业时给自己规划的人生路线是出纳,会计,总账,成本,主管,经理,总监,亚太区总监,而今路走了一半便停了下来。 离开...

  • 前进or后退

    一场风雨过后 工地泥泞不堪 积水?短路?停电! 停摆第二天 前方的路该怎样走 没有方向 只能前行 也许我真的不适合...

  • 前进or后退

    拍摄完后,闷头走在回家的路上,突然乌云密布,狂风暴雨倾泻而下。瞬间把我浇透。 此时身上的冰冷都不及心里的冷来的更甚...

  • 关于浏览器缓存

    1. window.location.hash实现ajax操作或者一些点击变化逻辑浏览器的前进后退 参考原文htt...

网友评论

      本文标题:ajax与前进后退

      本文链接:https://www.haomeiwen.com/subject/sozmcxtx.html