2012-07-30 118 views
6

我目前使用的代码点火器有漂亮的URL,我有这个系统,基本上使用Ajax允许您搜索健身房。如何在pushState后按下返回时重新加载页面?

使用健身房的列表后推状态

林被装载时,是这样的:

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

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

会发生什么,我使用.ajax发送搜索关键字和每个单独的复选框值(1或0),然后代码点火器使用POST数据和PHP,生成一个像上面那样的url。 ajax成功推送表明URL是PHP生成的URL。

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

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

我已经尝试了一些东西,但没有任何作品。我已经尝试了谷歌第一页上的所有内容,并且所有内容看起来都很有前途,但实际上并没有任何效果

无论如何刷新页面,如果pushstate网址更改为以前的网址?

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> 

回答

14

因为您从阿贾克斯成功方法推动的状态,你可以使用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 
    } 
} 
+0

我还是不太明白这个概念。我明白你需要打电话到popstate,但上面的代码只有在你点击前进按钮时才有效。我也发现这个网页:http://stackoverflow.com/questions/7888711/page-not-reloading-via-back-when-using-pushstate-onpopstate如果你去他的jsfiddle例子:http:// jsfiddle。 net/pimvdb/CCgDn/1 /它适用于他,但是如果我复制/粘贴代码,它只会提醒“初始状态”。我究竟做错了什么? – 2012-07-30 23:15:56

+1

注意我得到了正确的工作,但添加了location.reload();在那里你把event.state.foo这正是我想要做的,但我也需要这样做,当后退按钮也被按下。 – 2012-07-30 23:19:54

+1

没关系。用户操作错误不佳。 Lmao谢谢了。我很感激帮助。与location.reload()完美合作 – 2012-07-30 23:25:05