Jquery 在按下按钮状态后,如何在按下back时重新加载页面?

Jquery 在按下按钮状态后,如何在按下back时重新加载页面?,jquery,ajax,pushstate,Jquery,Ajax,Pushstate,我现在使用CodeIgniter来创建漂亮的URL,我有一个基本上使用ajax来搜索健身房的系统 加载健身房列表后,Im使用push状态,如下所示: example.com/list/search_key/pagination page/sort by/filters~separated~by~那 其中search_key是他们要搜索健身房所在区域的城市、州或社区,过滤器是单独的复选框 发生的事情是,我使用.ajax通过post发送搜索键和每个复选框值(1或0),然后CodeIgniter使用p

我现在使用CodeIgniter来创建漂亮的URL,我有一个基本上使用ajax来搜索健身房的系统

加载健身房列表后,Im使用push状态,如下所示:

example.com/list/search_key/pagination page/sort by/filters~separated~by~那

其中search_key是他们要搜索健身房所在区域的城市、州或社区,过滤器是单独的复选框

发生的事情是,我使用.ajax通过post发送搜索键和每个复选框值(1或0),然后CodeIgniter使用post数据和PHP生成一个类似上面的url。ajax成功推送将URL声明为PHP生成的URL

问题是,如果您使用say pagination转到第2页,而您想转到第1页,那么您自然会使用browsers back按钮。问题是,它只将URL地址栏备份到当前地址栏之前的URL,实际上并没有更改页面内容。我需要它或者使用旧的(以前的)url重新加载页面,或者刷新,或者其他什么

我甚至可以使用ajax使用URL数据重新提交表单,但我不知道如何做到这一点

我试过一些方法,但没有任何效果。我几乎已经在谷歌的第一页上尝试了一切,一切看起来都很有希望,但实际上什么都不起作用

如果pushstate url更改为以前的url,是否仍需要刷新页面

PS以下是我尝试过的一些关键事情:

<script type="text/javascript">
$(window).unload(function(e){
   e.preventDefault();
   alert("Back was pressed!");
});
// If this wouldve worked, it wouldve atleast alerted me that.

// The code off this URL: http://www.mrc-productivity.com/techblog/?p=1235

// Some of the codes off this URL: http://forum.jquery.com/topic/howto-force-page-reload-refresh-of-previous-page-when-back-button-is-pressed

// A few others.
</script>

$(窗口)。卸载(函数(e){
e、 预防默认值();
警报(“按下了后退!”);
});
//如果这行得通,至少会提醒我。
//此URL的代码为:http://www.mrc-productivity.com/techblog/?p=1235
//此URL的某些代码:http://forum.jquery.com/topic/howto-force-page-reload-refresh-of-previous-page-when-back-button-is-pressed
//还有一些。

由于您正在使用ajax成功方法按下状态,因此可以使用
窗口.onpopstate
方法检测后退按钮

请注意,仅调用history.pushState()或history.replaceState()不会触发popstate事件。popstate事件仅通过执行浏览器操作触发,例如单击后退按钮(或在JavaScript中调用history.back())


我还是不太明白这个概念。我知道你需要调用onpopstate,但是上面的代码只有在你点击前进按钮时才有效。我还发现了这个页面:如果你转到他的jsfiddle示例:它对他有效,但是如果我复制/粘贴代码,它只会提醒“初始状态”。我做错了什么?注意我做了正确的事情,但是添加了location.reload();你把event.state.foo放在那里,这正是我想要做的,但我也需要在按下后退按钮时这样做。没关系。用户操作错误。谢谢你。我感谢你的帮助。与location.reload()完美配合使用@戴维德拉伦斯你如何保存历史?看起来像是
location.reload()
第一次工作,但它在历史堆栈上放置了一个额外的相同URL,因此下一次按back按钮什么也不做-它转到上一个URL,现在与当前URL相同,然后再次将其推到堆栈上,这样一次按back按钮就不会再去任何地方了!
var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");

window.onpopstate = function(event) {
    if(event && event.state) {
        // event.state.foo
    }
}