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

すべて正常に動作します。ただし、ユーザーがこのグラフを離れ、ブラウザの「戻る」ボタンを使用して戻ると、HTML ではなく JSON が表示されます。

これを修正する方法を提案できますか?

4

2 に答える 2

6

これは、[戻る] ボタンを押すと、ブラウザが指定された URL の最後にキャッシュされたコンテンツを提供しているためです。あなたの場合、最後のコンテンツはAJAX(D3)によって要求されたJSONです。

受け入れられた回答に加えて、他の方法を試すこともできます-.htmlページのURLに追加するだけです。このフィルターをコントローラーまたはに追加することで自動化できますApplicationController

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

Vary: Acceptヘッダーを使用する 3 番目の標準的な方法もありますが、この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 に答える