javascript - 点击浏览器 "back"按钮显示 JSON 而不是 HTML(使用 Rails 和 d3.js)

标签 javascript ruby-on-rails json charts d3.js

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

相关文章:

javascript - 在谷歌地图标记标签的 Font Awesome 图标标记中放置一个数字

ruby-on-rails - 对每个请求持续运行的这两个奇怪的查询是什么?

javascript - 如何使用动态变量名调用 Angular 范围?

java - Response.entity().build 未返回所有结果

python - 从 None json.decoder.JSONDecodeError : Expecting value: line 1 column 1 (char 0) 引发 JSONDecodeError ("Expecting value"、 s、err.value)

java - ExtJS 无限网格永远加载(totalProperty == pageSize)

javascript - Flutter - 谷歌地图,不显示我的位置

javascript - 在 KineticJS 中按类名从阶段获取多个对象

javascript - 无法摆脱 fizzbuzz 中的逗号

ruby-on-rails - IronRuby On Rails VS。 Ruby On Rails(入门)