我正在使用像这样的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。
你能建议我如何解决这个问题吗?
答案 0 :(得分:5)
嗯,这是因为当您点击后退按钮时,浏览器正在为给定的URL提供最后缓存的内容。在你的情况下,最后一个内容是AJAX(D3)要求的JSON。
除了接受的答案,您还可以尝试其他方式 - 只需将.html
附加到网页网址即可。您可以通过将此过滤器添加到控制器或ApplicationController
:
before_filter do
if request.format == :html && !params[:format]
redirect_to format: :html
end
end
还有第三种使用Vary: Accept
标头的标准方式,但由于Chrome bug The browser cache is Vary broken和[{3}}
答案 1 :(得分:2)
d3.json(window.location.pathname + ".json" + window.location.search.substring(0), function(json){
// generate chart
}
受到this question的启发。