jQuery AjaxリクエストがInternet Explorerでキャッシュされるのを防ぐ方法は?


275

Internet ExplorerでjQuery Ajaxリクエストがキャッシュされないようにするにはどうすればよいですか?


1
GETの代わりにPOSTを使用すると、キャッシュが防止されます。stackoverflow.com/questions/6216234/disable-ajax-caching
Prashant Gupta

8
YSlowとChromeの開発ツールは、AJAXにPOSTリクエストを使用すると警告を表示します-本当にPOSTが必要でない限り、一般的にGETが推奨される方法です。
Pawel Krakowiak 2013年

回答:


524

$.ajaxSetup()たとえば、を使用してキャッシュをグローバルに無効にできます。

$.ajaxSetup({ cache: false });

これにより、リクエスト時にタイムスタンプがクエリ文字列に追加されます。特定の$.ajax()呼び出しのキャッシュをオフにするにはcache: false、次のようにローカルで設定します。

$.ajax({
  cache: false,
  //other options...
});

2
以前にこのグローバルセットアップアイテムを見たことがあるといいのですが。数十件の個別の通話を更新する必要がなくなりました。
James Skemp、2012年

2
私はこれが古い答えであることを知っています、これがすべてのajaxのような呼び出し(ajax、getおよびpost)または特定のajax呼び出しのみに影響を与えるかどうか疑問に思っていますか?
ゴツゴツ

6
@Lumpyは、に従ってjQuery.ajax()のドキュメントcache: falseのみHEADとGETリクエストで正しく動作します。また、で設定cache: falseした場合$.ajaxSetupjQuery.ajaxSetup()のドキュメントによると、「将来のAjaxリクエストのデフォルト値が設定されます」。したがって、はい、それはすべての将来のHEADおよびGET AJAXリクエストのキャッシュを無効にします。
John Washam 2013年

11
注意:これにより、URLに「?_ = somenumber」が追加されます。バックエンドがURLのクエリパラメータの「_」を無視できることを確認してください。

4
の+1 cache: false。キャッシングをグローバルにオフにすることはやり過ぎのように思えますが、リクエストごとに制御することは完璧です。ありがとう
コーディング終了

21

一意のパラメータを設定すると、キャッシュは機能しません。次に例を示します。

$.ajax({
    url : "my_url",
    data : {
        'uniq_param' : (new Date()).getTime(),
        //other data
    }});

13
これは、cacheパラメーターが既に裏で行っていることです。
Jose Rui Santos

上記のajaxSetupコードは私には機能しませんでした。理由を理解するのに多くの時間を費やしませんでした。グローバル変数は不良であり、キャッシュしたい場合があります。この答えは私の意見では最良です。
ブレードフィスト2013

@bladefistあなたは私と同じ問題にぶつかったようです。IEがキャッシュを停止するようにデータを変更する以外に他のオプションがあるかどうかを知っていますか?私が尋ねている理由は、私のリクエストは実際には「データ」を使用せず、すべてのデータがURLに沿っているためです。
badri

1
実際、これは確かに、この情報によると、キャッシュが背後で行うべきこと です-api.jquery.com/jquery.ajax cache(デフォルト:true、false for dataType 'script' and 'jsonp')Type:Boolean設定されている場合falseにすると、要求されたページがブラウザによってキャッシュされないように強制します。注:キャッシュをfalseに設定すると、HEADおよびGETリクエストでのみ正しく機能します。GETパラメータに「_ = {timestamp}」を追加することで機能します。
badri

@bladefist GETパラメータにタイムスタンプを追加することを明確に示しています。では、なぜKossが提供するコードが機能し、ローカルまたはグローバルキャッシュを無効にできないのでしょうか。
badri

12
Cache-Control: no-cache, no-store

これら2つのヘッダー値を組み合わせて、IEとFirefoxの両方で必要な効果を得ることができます


12
問題は、残念ながらIEがこれを常に聞くとは限らないことです:)
Nick Craver

1
@ニック、それは確かですか?このCache-Controlはテストしていません。Jquery Ajax chacheはすべてのブラウザで機能しますか?

7
それすべてのブラウザで動作するはずです、しかし... IEは時々地獄をキャッシュするのが好きなだけです
Nick Craver

@Nick-ajaxキャッシュをfalseに設定しましたが、ajax成功メッセージがIEでもFFでも取得されませんでした。私のコードを確認してもらえますか?私のコードは間違っていますか?ありがとうvar ajaxfile = base + "index.php / msc / popup_view /" + obj + "/" + id + "/" + no_tab; $ .ajax({type: "GET"、url:ajaxfile、// contentType: "application / json; charset = utf-8"、cache:false、success:function(msg){$( "#popup")。 html(msg);}});
SABU 2010年

IE11がこのヘッダーを無視することを確認しました。ChromeもCORSエラーをスローしました。
レーニン

5

これが回答の提案です。

http://www.greenvilleweb.us/how-to-web-design/problem-with-ie-9-caching-ajax-get-request/

アイデアは、たとえば現在の日付と時間を含むパラメーターをajaxクエリに追加することです。これにより、ブラウザーはパラメーターをキャッシュできなくなります。

リンクを見てください、それはよく説明されています。


13
これは、cacheパラメーターが既に裏で行っていることです。
Jose Rui Santos

1

次のように定義できます。

let table = $('.datatable-sales').DataTable({
        processing: true,
        responsive: true,
        serverSide: true,
        ajax: {
            url: "<?php echo site_url("your url"); ?>",
            cache: false,
            type: "POST",
            data: {
                <?php echo your api; ?>,
            }
        }

またはこのように:

$.get({url: <?php echo json_encode(site_url('your api'))?>, cache: false})

それが役に立てば幸い


-4

これは古い投稿ですが、IEが問題を起こしている場合。GETリクエストをPOSTに変更すると、IEはそれらをキャッシュしなくなります。

私はこれを難しい方法で理解するのに多くの時間を費やしました。それが役に立てば幸い。


私はあなたがHTTPアクションを誤用するべきではないと思います。cache:falseケースバイケースでの設定は、進むべき道です。
tommybond
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.