我有一个单页应用,其中页面永远不会被卸载。我正在使用URL中的#并使用javascript来检测hashchange,然后使用JS和AJAX更新UI ...我不希望前进和后退按钮发出额外请求服务器。
目前,用户最初第一次访问该网站时,会发出服务器请求(可以)
Processing by MyController#index as HTML
我的目标是这个服务器请求只在用户在网站上的时间发生一次......每次他们点击任何其他链接时,我只使用"#"在网址中,以防止新的服务器请求...所以我所有的" a"标签看起来像这样
<a href="#page1/
我遇到的问题是点击后退和前进按钮会触发我的JS hashchange监听器(这就是我想要的)......但它也会调用
Processing by MyController#index as HTML //I DO NOT WANT THIS TO HAPPEN
以下是我目前正在使用的功能
1。)用户导航到mydomain.com
2。)&#34;由MyController处理#index为HTML&#34;启动并发出服务器请求(这没关系)
3.。)用户点击链接,现在网址读取mydomain.com/#page1,我用JS更新视图(这是正常的)
4。)用户点击链接,现在网址读取mydomain.com/#page2,我用JS更新视图(这是正常的)
5.。)用户点击BACK,现在网址读取mydomain.com/#page1,我用JS更新视图(这是正常的)
6。)服务器请求自动重新加载页面(&#34;处理MyController #index,因为HTML&#34;再次调用)(这是不确定)
当用户点击后退按钮时,如何阻止步骤6发生?...我只是希望更改网址并让我通过JS更新我的UI并且没有服务器请求
另外,如果这有帮助的话,我在轨道上使用ruby。
答案 0 :(得分:1)
你想做的事情是不可能的。您无法覆盖浏览器按钮的默认行为,如后退/前进/停止/刷新等。
您可以做的是创建自己的后退和前进按钮(并将它们放置在实际页面上) - 并相应地编写其事件处理程序以进行AJAX调用。
答案 1 :(得分:0)
这对我来说很好 jQuery hashchange event
答案 2 :(得分:0)
终于弄明白了。出于某种原因,只要单击后退或前进按钮,Turbolinks就会重新加载页面。我从应用程序中删除了Turbolinks gem,现在它的工作完美了。