我正在使用 d3.js JSON 回调在 Rails 中生成图表,如下所示:
查看
d3.json(document.URL, function(data){
// generate chart
}
Controller
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 提供最后缓存的内容。 IIn your case 最后的内容是 AJAX (D3) 请求的 JSON。
除了接受的答案之外,您还可以尝试其他方式 - 只需将 .html
附加到页面 URL。您可以通过将此过滤器添加到 Controller 或 ApplicationController
来自动化它:
before_filter do
if request.format == :html && !params[:format]
redirect_to format: :html
end
end
Vary: Accept
header 还有第三种标准方式,但它可能会因此导致一些问题 Chrome bug以及 The browser cache is Vary broken 中描述的一些问题
关于javascript - 点击浏览器 "back"按钮显示 JSON 而不是 HTML(使用 Rails 和 d3.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11966766/