Rails 4 中的 AJAX、HTML5 历史 API 和缓存

Posted

技术标签:

【中文标题】Rails 4 中的 AJAX、HTML5 历史 API 和缓存【英文标题】:AJAX in Rails 4, HTML5 history API and caching 【发布时间】:2014-08-30 05:31:55 【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

【参考方案1】:

如果我猜对了,您希望对同一个操作有不同的行为,一种是 get 请求,另一种是 ajax 请求。

你可以这样做:

mypage_controller.rb

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

my_page.js.erb

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

这里有一篇文章做这种行为Rails 4: How to partials & AJAX, dead easy

这样你就可以用同样的动作响应 ajax 并获取请求

【讨论】:

以上是关于Rails 4 中的 AJAX、HTML5 历史 API 和缓存的主要内容,如果未能解决你的问题,请参考以下文章

HTML5中的History和Location对象

HTML5中的History和Location对象

Rails 4 - 通过使用 AJAX UJS 的集合中的链接更新表

如何使用 Rails 4 轮询数据库中的一个值,如果值更改,则使用 AJAX 刷新

Rails 4数据表ajax路由问题

Rails 4:通过ajax检查优惠券