何かをする前に: $.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 にヒットしないため)。