jquery - 在pushState之后按下后退时如何重新加载页面?

标签 jquery ajax pushstate

我目前使用 Code Igniter 来获得漂亮的 URL,并且我有一个基本上使用 ajax 的系统来允许您搜索健身房。

我在加载健身房列表后使用推送状态,如下所示:

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

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

发生的情况是,我使用 .ajax 通过 post 发送搜索键和每个单独的复选框值(1 或 0),然后 code igniter 使用 POST 数据和 PHP,生成一个像上面这样的 url。 ajax 成功推送表明 URL 是 PHP 生成的 URL。

问题是,如果您使用分页功能转到第 2 页,并且想要转到第 1 页,那么您自然会使用浏览器的后退按钮。问题是,它只是将 URL 地址栏返回到当前地址栏之前的 url,它实际上并没有更改页面内容。我需要它使用旧的(以前的)url 重新加载页面,或者刷新,或者其他什么。

我什至可以使用 ajax 使用 URL 数据重新提交表单,但我不知道如何执行此操作。

我尝试了一些方法,但没有任何效果。我几乎已经尝试了谷歌首页上的所有内容,一切看起来都很有希望,但实际上没有任何效果。

如果推送状态 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>

最佳答案

由于您是从 ajax success 方法推送状态,因此您可以使用 window.onpopstate 方法检测后退按钮。

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

var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");

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

关于jquery - 在pushState之后按下后退时如何重新加载页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11730746/

相关文章:

javascript - 为什么谷歌浏览器会在 pushState 上访问服务器?

javascript - Safari 中的历史记录 API - PushState/replaceState - 状态未定义

javascript - jQuery 瘦身包 fadeIn

php - 操作完成后禁用提交表单

jquery - Internet Explorer 中的 History.js 哈希回退和 PushState 问题

jquery - Bootstrap 4 ajax成功消息快速闪过

javascript - jstree : Uncaught TypeError: Cannot read property 'children' of undefined

javascript - 根据邮政编码自动填充州和城市

javascript - 加载 View 后express.js传递变量

javascript - jQuery .insertAfter() 和 .append() 不适用于 AJAX 调用