点击浏览器“后退”按钮显示JSON而不是HTML(使用Rails& d3.js)

时间:2012-08-15 09:15:48

标签: javascript ruby-on-rails json charts 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。

你能建议我如何解决这个问题吗?

2 个答案:

答案 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的启发。