8

我正在使用 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。

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

4

2 回答 2

6

嗯,这是因为当您点击返回按钮时,浏览器正在为给定的 URL 提供最后缓存的内容。I在您的情况下,最后一个内容是 AJAX (D3) 请求的 JSON。

除了接受的答案之外,您还可以尝试其他方式 - 只需附加.html到页面 URL。您可以通过将此过滤器添加到控制器或ApplicationController

   before_filter do
     if request.format == :html && !params[:format]
       redirect_to format: :html
     end
   end

还有第三种标准方式,Vary: Accept但由于这个Chrome 错误和浏览器缓存已损坏中描述的一些问题,它可能会导致一些问题

于 2014-11-11T21:24:54.607 回答
2
d3.json(window.location.pathname + ".json" + window.location.search.substring(0), function(json){  
    // generate chart
}

由于受到这个问题的启发。

于 2012-08-16T10:21:20.240 回答