1. ホーム
  2. asp.net

[解決済み] IE8でのAJAX結果の予期せぬキャッシュについて

2022-06-17 20:15:07

質問

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");

これは、ページにヘッダ情報を注入するだけです。これを確認するには www.wikipediamaze.com にアクセスし、ログインして新しいパズルを始めてみてください。

私がテストしたすべてのブラウザ(Google Chrome、Firefox、Safari、Internet Explorer)で、とてもうまく動作します。 ただし を除いて、IEではうまく動作します。IEではすべてがうまく注入されます。 は、最初の を呼び出しますが、それ以後は決して /game/getpuzzleinfo . まるで結果をキャッシュしてしまったかのようです。

への呼び出しを変更すると $.post("/game/getpuzzleinfo", ... IEはそれをうまく拾います。しかし、その後、Firefox は動作を停止します。

どなたか、なぜ IE が私の $.get ajax 呼び出しをキャッシュするのでしょうか?

アップデイト

以下の提案に従って、私は私の問題を解決するために、私のAjaxリクエストをこれに変更しました。

$.ajax({
    type: "GET",
    url: "/game/getpuzzleinfo",
    dataType: "json",
    cache: false,
    success: function(data) { ... }
});

どのように解決するのですか?

IE は、Ajax レスポンスを積極的にキャッシュすることで有名です。jQueryを使用しているため、グローバルオプションを設定することができます。

$.ajaxSetup({
    cache: false
});

で、jQuery がリクエストのクエリー文字列にランダムな値を追加することで、IE によるレスポンスのキャッシュを防止します。

キャッシュを行いたい他の Ajax 呼び出しがある場合、これはそれらのキャッシュも無効にすることに注意してください。その場合、$.ajax()メソッドの使用に切り替え、必要なリクエストに対して明示的にそのオプションを有効にします。

参照 http://docs.jquery.com/Ajax/jQuery.ajaxSetup をご覧ください。