ruby-on-rails - Rails 4 中的 AJAX、HTML5 历史 API 和缓存

标签 ruby-on-rails ajax html http-caching html5-history

我正在将一个通过 URL 加载新 View 的 Rails 应用程序移动到一个完全 AJAX 版本。我们这样做的方式是通过 AJAX 加载所有 View 并通过 HTML5 History API 更改 URL。我们还希望在整个过程中使用 HTTP 缓存,以便我们可以缓存每个部分。

但现在我们陷入了一个问题。现在基本上有两种加载每个页面的方法 - 通过 URL 或通过单击通过 AJAX 加载该部分的内容。但这导致我们创建了两种不同的 View 和 Controller 来加载相同的内容——一种直接从 URL 加载,另一种通过单击主页并通过 AJAX 和历史 API 加载。那么,当直接通过 URL 和 AJAX 加载时,我们如何确保从浏览器缓存中加载相同的 View ?

举个例子,GitHub 在他们的树 slider 中使用。您可以通过在窗口中浏览代码或直接使用它的 URL 路径来直接访问代码。我确定该页面之前是否已加载,他们会从浏览器缓存中获取部分内容。

有没有办法向相同的 URL 发送请求,但只呈现部分页面或加载整个页面,具体取决于请求是通过单击选项卡发送还是在地址栏中输入?如果它们已经存在于浏览器中,它应该使用缓存的部分。

谢谢

最佳答案

如果我没看错,你希望对同一个 Action 有不同的行为,一种是 get 请求,另一种是 ajax 请求。

你可以这样做:

我的页面 Controller .rb

def my_page
  ...(your logic here)
  respond_to do |format|
    format.js
    format.html
  end
end

我的页面.js.erb

alert('testing');
.... (further ajax code here)

这是一篇执行此行为的文章 Rails 4: How to partials & AJAX, dead easy

通过这种方式,您可以对 ajax 进行相同的响应并获取请求

关于ruby-on-rails - Rails 4 中的 AJAX、HTML5 历史 API 和缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24649472/

相关文章:

javascript - 尝试使用 AJAX 发布 JSON 并接收 400

html - 使用 Bootstrap 行类但无法将 2 个表单放在一起

ruby-on-rails - 全局禁用 Rails SQL 查询缓存

ruby-on-rails - Rails Postgresql 数据库查询失败

javascript - jQuery AJAX - 获取失败的详细信息并插入到 DIV 中

javascript - CSS Flex Center 和 Masonry JS 冲突

html - 使网站适合不同的分辨率

ruby-on-rails - 在 Ubuntu 上安装 RMagick 和 ImageMagick 有技巧吗?

mysql - 如何使用 Rails SQL 查询搜索 nil 结果

javascript - AJax 没有正确调用 php 文件,html 表单