8

何かをする前に: $.getJSON 戻るボタンがページではなく、JSON の戻りデータを表示していても役に立ちませんでした助けません。

問題は次のとおりです。

ページ内から URL を呼び出して json データを取得しています。これは、同じページ内で jquery テンプレートを使用してレンダリングされます。

http://someurl.com/searchというページにいて、次のようなリクエストを開始しているとします。

$.ajax({
  url: '/searchthis', //important, this is NOT THE SAME URL
  cache: false,
  type: 'GET',
  headers: {
    "Accept": "application/json",
  },
  dataType: 'json'
  success: function(data) {
    doSomethingWithResults(data);
  }
});

Rack 応答には、キャッシュ制御ヘッダーがキャッシュなしに設定されています。

Cache-Control:no-cache

すべて正常に動作しますが、Chrome で別のページに移動して [戻る] ボタンを押すと、そのままの JSON データが表示されます。IE8 でリロード ボタンを押すと、同じ動作が発生します。アドレス バーの URL で Enter キーを押すだけで、どちらも問題なく動作します。

Chrome の担当者が修正しないため、これを修正する方法がわかりません ( http://code.google.com/p/chromium/issues/detail?id=108425を参照) 。

ブラウザ側での誤解のように思えます。なぜなら、実際にすべきではないもの (応答ヘッダー) をキャッシュし、間違った URL の下に何かをキャッシュするためです (JSON リクエストが同じ URL にヒットしないため)。

4

2 に答える 2

6

問題は実際にはRailsでした。ChromeとIEの両方が特定の形式なしで最後の応答を要求するため、Railsは最初の応答ブロックを取得します。私の場合はたまたまjsonでした。jsonブロックの前にhtmlブロックを配置すると、問題が解決しました。

respond_to do |format|
  format.html { ... } //important because the request comes with no specific format
  format.json { ... }
end
于 2012-05-24T08:05:47.043 に答える