【问题标题】: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 应用程序中,它也应该相当容易集成。

      【讨论】:

        【解决方案3】:

        这是另一个类似于 PJAX 和 Turbolinks 的解决方案

        https://github.com/igor-alexandrov/wiselinks

        【讨论】:

          【解决方案4】:

          使用 PJAX。仅重新加载您想要的页面部分:https://github.com/rails/pjax_rails

          它已经与 Rails 集成,您放置在此块之外的所有内容都不会重新加载:

          <div data-pjax-container>
            <!-- PJAX updates will go here -->
          </div>
          

          【讨论】:

            【解决方案5】:

            既然你把 jQuery 作为一个标签,我建议你看看http://api.jquery.com/load/。

            【讨论】:

              猜你喜欢
              • 2014-06-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-04-17
              • 2021-11-11
              • 1970-01-01
              • 2020-07-14
              • 1970-01-01
              相关资源
              最近更新 更多