【问题标题】:How not to reload footer on page navigation如何不在页面导航上重新加载页脚
【发布时间】:2013-12-07 05:26:39
【问题描述】:
我有音乐应用程序,其中页脚中有简单的播放器。用户可以从主页列表中选择歌曲并在页脚中播放。现在的要求是,即使用户在应用程序中从主页移动到其他页面(个人资料、书签),页脚播放器也不应该重新加载,并且应该继续播放最初在主页上选择的音频。
我该怎么做?我需要通过 ajax 加载页面吗?
编辑:
我忘了提到开发已完成 80%,并且每次页面加载时都会重新加载页脚。如果我现在必须使用 Ajax,需要多少返工?
【问题讨论】:
标签:
ajax
ruby-on-rails-3
jquery
【解决方案1】:
您可以使用普通的旧 HTML 并使其更容易和更快地部署,因为该应用程序几乎“完成”了。稍后您应该实现一个更好的 (ajax) 选项。
简化:index.html
<iframe id="mainframe" src="other.html"></iframe>
<footer>
Don't reload me pls :D
</footer>
在页面导航(链接)上,您只在大型机上操作,不会重新加载页脚。
注意:这是丑陋的,可能会给你带来问题,但可能会让你做最少的修改并让您的网站尽快上线。
然后将整个事情重写为使用 ajax 可能是“需要一些工作”到“需要大量工作”,具体取决于应用程序的实现方式。请注意,永远不会“几乎不需要工作”。
【解决方案2】:
已经有一些非常好的答案,但我只是想更好地解释你的问题。
HTTP 请求是“无状态的”,这意味着每个请求都是完全独立的,在您请求新页面之前,您无法知道该页面的状态。这使得仅使用 HTTP 就不可能不对每个请求重新加载页脚。
您可以使用 cookie 在请求之间保存信息,因此您可以在请求之前停止播放器的位置启动播放器,但它仍会重新加载(并停止一小段时间)。
您还可以将页面的其余部分放在 iframe 中,并且只更改 iframe 的内容。
但是由于各种原因,这些解决方案并不是很好,所以我强烈推荐最后一个也是最好的解决方案:ajax。
简单的解决方案是@aledalgrande 建议的pjax(或@adbeel 建议的wiselink)。我将练习使您的站点成为“一个站点应用程序”,您可以在其中使用 ajax 替换页面的特定部分而不是整个页面。然而,即使在现有的 Rails 应用程序中,它也应该相当容易集成。