Internet Explorer が JQuery Ajax リクエストの結果をキャッシュする際に深刻な問題が発生しています。
私のウェブページには、ユーザーが新しいページに移動するたびに更新されるヘッダーがあります。ページが読み込まれたら、これを実行します。
$.get("/game/getpuzzleinfo", null, function(data, status) {
var content = "<h1>Wikipedia Maze</h1>";
content += "<p class='endtopic'>Looking for <span><a title='Opens the topic you are looking for in a separate tab or window' href='" + data.EndTopicUrl + "' target='_blank'>" + data.EndTopic + "<a/></span></p>";
content += "<p class='step'>Step <span>" + data.StepCount + "</span></p>";
content += "<p class='level'>Level <span>" + data.PuzzleLevel.toString() + "</span></p>";
content += "<p class='startover'><a href='/game/start/" + data.PuzzleId.toString() + "'>Start Over</a></p>";
$("#wikiheader").append(content);
}, "json");
ページにヘッダー情報を挿入するだけです。確認するには、ウィキペディアログインして新しいパズルを開始します。
私がテストしたすべてのブラウザ(Google Chrome、Firefox、Safari、Internet Explorer)で問題なく動作しますを除外するIEではすべてが問題なく挿入されます初めてしかし、その後は を呼び出すことすらありません/game/getpuzzleinfo
。 結果などがキャッシュされているかのようです。
呼び出しを$.post("/game/getpuzzleinfo", ...
IE に変更すると、問題なく受信されます。しかし、Firefox は動作しなくなります。
$.get
IE が私のAjax 呼び出しをキャッシュしている理由について、誰か説明していただけませんか?
アップデート
以下の提案に従って、Ajax リクエストを次のように変更したところ、問題は解決しました。
$.ajax({
type: "GET",
url: "/game/getpuzzleinfo",
dataType: "json",
cache: false,
success: function(data) { ... }
});
ベストアンサー1
IE は Ajax レスポンスを積極的にキャッシュすることで有名です。jQuery を使用している場合は、グローバル オプションを設定できます。
$.ajaxSetup({
cache: false
});
これにより、jQuery はリクエスト クエリ文字列にランダムな値を追加し、IE が応答をキャッシュできなくなります。
キャッシュが必要な他の Ajax 呼び出しが実行中の場合、これによってそれらの呼び出しもキャッシュが無効になることに注意してください。その場合は、$.ajax() メソッドを使用するように切り替え、必要なリクエストに対してそのオプションを明示的に有効にします。