1. ホーム
  2. jquery

[解決済み] IE8で$.getJSONがキャッシュされたデータを返す

2022-11-19 17:35:48

質問

現在、ASP.net MVCとJQueryで遊んでいます。私は意味をなさないように見える動作に出くわしました。

私はJQueryの $.getJSON 関数を呼び出して、いくつかの div にデータを入力しています。イベントが発生するのは $(document).ready イベントが発生します。これは完全に動作します。

には、小さな AJAX.BeginForm があり、div に値を入れるときに使用する別の値を追加しています。 これはリモート関数を正しく呼び出し、成功したら元の javascript 関数を呼び出して div に再投入します。

ここが奇妙なところです。FireFox と Chrome では、すべてが動作します。 しかし、IE8 (ベータ) では、populate Div スクリプト ($.getJSON 関数を呼び出す) への 2 回目の呼び出しがキャッシュされたデータを取得し、サーバーに問い合わせないのです!

この質問が意味をなすことを願っています:要するに、なぜ $.getJSON はキャッシュされたデータを取得するのでしょうか? そして、なぜ IE8 だけに影響するのでしょうか?

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

Firefox と Chrome は、すべての Ajax リクエストをキャッシュできないものとして扱います。IE (すべてのバージョン) は、Ajax 呼び出しを他の Web リクエストと同様に扱います。それが、この動作が見られる理由です。

各リクエストでデータをダウンロードするようIEに強制する方法。

  • あなたが言ったように、JQueryの'cache'または'nocache'オプションを使用します。
  • リクエストにランダムなパラメータを追加する (醜いですが、動作します :))
  • サーバー側で、キャッシュ可能性を設定する (例えば属性を使用します。下記参照)

コードです。

public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }
}