点击浏览器的“后退”按钮显示的是JSON而不是HTML(使用Rails和d3.js)
Hitting browser "back" button shows JSON rather than HTML (using Rails & d3.js)
我正在使用d3.js JSON回调在Rails中生成一个图表,如下所示:
视图
d3.json(document.URL, function(data){
// generate chart
}
控制器
def index
respond_to do |format|
format.html do
# return the HTML
end
format.json do
# return the JSON
end
end
end
一切正常。 但是,当用户离开此图表,然后使用浏览器上的"后退"按钮导航回该图表时,他们会看到 JSON 而不是 HTML。
你能建议我如何解决这个问题吗?
嗯,这是因为当您点击后退按钮时,浏览器正在为给定的 URL 提供上次缓存的内容。在您的情况下,最后一个内容是 AJAX (D3) 请求的 JSON。
除了接受的答案,您还可以尝试其他方式 - 只需将.html
附加到页面 URL。您可以通过将此过滤器添加到控制器或ApplicationController
来自动化它:
before_filter do
if request.format == :html && !params[:format]
redirect_to format: :html
end
end
还有第三种标准方法带有Vary: Accept
标头,但由于此Chrome错误和浏览器缓存已损坏中所述的一些问题,它可能会导致一些麻烦
d3.json(window.location.pathname + ".json" + window.location.search.substring(0), function(json){
// generate chart
}
受到这个问题的启发。
相关文章:
- 使用html中的外部javascript进行数据验证
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 使用html表单中的参数调用JavaScript函数
- 有没有一种方法可以仅使用HTML/CSS来隐藏基于特定值的数据单元格
- 在Angular中重新使用HTML端的计算文本
- 当#在iFrame中使用HTML时,阻止页面移动
- 回复'js'仅当请求有错误时(否则使用html)
- 具体化:如何只使用HTML和Javascript制作播放/暂停按钮
- http请求使用html而不是json进行响应
- 使用HTML进行Visual Basic UI设计
- 使用html和Javascript进行客户端排序
- 如何在angularJS中运行for循环而不使用html标记
- 在javascript函数中使用@Html.Raw
- 如何使用HTML/CSS/JavaScript开发桌面应用程序
- 如何使用HTML、CSS和JavaScript创建自动图片库幻灯片
- 在JavaScript中使用HTML变量
- 对javascript使用.html中的select id
- 使用HTML和JS的iPhone游戏中的性能问题,以及appMobi
- 使用HTML标记中的JS变量在Javascript中动态创建HTML
- 允许在Angular控制器或视图中使用html标记