Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 点击浏览器“;“后退”;按钮显示JSON而不是HTML(使用Rails和d3.js)_Javascript_Ruby On Rails_Json_Charts_D3.js - Fatal编程技术网

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

Javascript 点击浏览器“;“后退”;按钮显示JSON而不是HTML(使用Rails和d3.js),javascript,ruby-on-rails,json,charts,d3.js,Javascript,Ruby On Rails,Json,Charts,D3.js,我正在Rails中使用d3.JSON回调生成一个图表,如下所示: 看法 控制器 def index respond_to do |format| format.html do # return the HTML end format.json do # return the JSON end end end 一切正常。但是,当用户离开此图表,然后使用浏览器上的“后退”

我正在Rails中使用d3.JSON回调生成一个图表,如下所示:

看法

控制器

def index
    respond_to do |format|
        format.html do
            # return the HTML
        end
        format.json do
            # return the JSON
        end
    end
end
一切正常。但是,当用户离开此图表,然后使用浏览器上的“后退”按钮导航回该图表时,会显示JSON而不是HTML

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

d3.json(window.location.pathname + ".json" + window.location.search.substring(0), function(json){  
    // generate chart
}

正如。

所启发的那样,这是因为当您点击后退按钮时,浏览器正在为给定URL提供最后一次缓存的内容。在您的例子中,最后一个内容是AJAX(D3)请求的JSON

除了可接受的答案,您还可以尝试另一种方法-只需将
.html
附加到页面URL。您可以通过将此筛选器添加到控制器或
ApplicationController
,使其自动化:

   before_filter do
     if request.format == :html && !params[:format]
       redirect_to format: :html
     end
   end
Vary还有第三种标准方法:Accept
header,但这可能会导致一些问题,以及中描述的一些问题

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