2009-06-04 9 views
9

ブラウザがAjaxの結果をキャッシュしないようにするにはどうすればよいですか?私は、ブラウザのデータがクリアされている場合にのみ、結果を表示するAjaxスクリプトを起動しました。ブラウザでAjax/javascriptの結果キャッシュを防止するにはどうすればよいですか?

IE6とFirefox 3.0.10でテスト

+2

実際に、これはかなりよく文書化の問題である:

完全なコード例は、このようなものです。あなたがGoogleのために非常に包括的な答えを見つけることができると確信しています。 – jrharshath

答えて

11

あなたが送信しているURLにランダムなクエリ文字列を追加します。

など。 Ajaxリクエストが "http://www.xyz.com/a" に送信された場合は、最後にランダムな文字列を追加してください。 "http://www.xyz.com/a?q=39058459ieutm39"

+3

...あなたはjavascriptでランダムな文字列を生成することができます:Math.floor(Math.random()* 1000000) – Manne

+2

この解決法は重大な欠点を持っています。私の場合は、オフラインで使用するためにキャッシュを保存したいので、古いバージョンのリクエストではキャッシュに入れたくありません。 –

4

これは私が知っている2つの手法です。

  • AJAXリクエストURLに何らかの種類のクエリ文字列を追加して、常に一意になるようにします。ブラウザが
13

ランダムURLが機能をキャッシュしないように(おそらくランダムな値と組み合わせて)ミリ秒のタイムスタンプは、AJAX応答でこの

  • 設定HTTPキャッシュ制御ヘッダーの良いですが、それはようなものですハックのHTTPには、うまくいくはずのソリューションが組み込まれています。ソリューションindicated hereを試してみてください。基本的に、ヘッダーを設定します。

    "Pragma":   "no-cache", 
    "Cache-Control":  "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", 
    "Expires":   0, 
    "Last-Modified":  new Date(0), // January 1, 1970 
    "If-Modified-Since": new Date(0) 
    
  • +0

    パーフェクト、ありがとう。 (サーバからの応答ではなく、クライアント上でヘッダーが設定されているのは奇妙ですが) –

    +0

    解決策を実装しようとするとエラーが発生します: 'request header fieldプラグマは「access-control-許可ヘッダー "。どのようにこれを避けるためのアイデア? Look:http://stackoverflow.com/questions/23048184/xmlhttprequest-with-no-cache-request-header-is-not-allowed –

    +0

    クエリ文字列に乱数を渡すと、私が行っていた呼び出しは失敗します。私はサービスを構築しませんでしたが、すべてのパラメータを解釈しようとしていたようです。これは完璧なソリューションでした、ありがとう! – hack3rfx

    4

    jQueryを使用すると、グローバルなajax設定{cache:false}を設定できます。それを参照してください。jquery ajax docs

    8

    私はjQuery {cache:false}メソッドを使用しましたが、それは魅力的でした。

    $.ajaxSetup({cache: false}); 
    
    +0

    これは素晴らしいです!ランダムなクエリ文字列が機能しません。 – Brent81

    +0

    そして、私のために、ランダムな文字列だけが機能しました! – user984003

    +0

    ajaxSetupはajax呼び出しでのみ機能します。他のJS呼び出しでは、疑似乱数列のハックを追加する必要があります。 –