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 和缓存的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4 - 通过使用 AJAX UJS 的集合中的链接更新表