您的位置:首页 > 其它

Ajax局部页面刷新和history

2016-05-20 16:31 330 查看
ajax能实现页面的无刷新加载,但是会造成无法前进后退的问题。

我们可以人为的使用history.pushState来人造历史信息, 并且通过监听popstate事件来知道用户点击了浏览器后退或前进按钮,然后将页面元素还原到历史上的某个状态。

// 点击查询按钮的时候人为构造一个浏览器历史
$('#a').click(function() {
$(targetSelector).load(url);
history.pushState({
container : targetSelector,
content   : $(targetSelector).html()
}, null, url);

});


// 当浏览器后退后者前进的时候,我们把当时的结果重新加载到container里来
window.addEventListener('popstate', function() {
var state = history.state
$(state.container).html(state.content);
})


注释:上述js在实现时会有陷阱,但此处只是让读者能够了解,history.pushState(replaceState也一样)的用法,和history.pushState(state,document.title,url)中的各个参数的作用及意义。

另附window.onpopstate的说明:

history.go和history.back(包括用户按浏览器历史前进后退按钮)触发,并且页面无刷的时候(由于使用pushState修改了history)会触发popstate事件,事件发生时浏览器会从history中取出URL和对应的state对象替换当前的URL和history.state。通过event.state也可以获取history.state。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ajax pushState