2012-07-13 13 views
22

私はアプリケーションをセットアップしました。これはOperaとFirefoxでうまく動作しますが、Google ChromeではAJAXリクエストをキャッシュして失効したデータを表示します。ChromeがAJAXリクエストをキャッシュしないようにする

http://gapps.qk.com.auはアプリです。 Chromeで実行した場合、AJAXリクエストを送信することさえできませんが、別のブラウザで試してみると、常にAJAXリクエストが行われ、データが返されます。

Chromeがこの動作を行うのを止める方法(Apache/PHP/HTML/JS)はありますか?

AJAX呼び出し:

function sendAjax(action,domain,idelement) { 

        //Create the variables 
       var xmlhttp, 
        tmp, 
        params = "action=" + action 
          + "&domain=" + encodeURIComponent(domain) 

        xmlhttp = new XMLHttpRequest(); 
       //Check to see if AJAX request has been sent 
       xmlhttp.onreadystatechange = function() { 
        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { 
         $('#'+idelement).html(xmlhttp.responseText); 
        } 
       }; 
       xmlhttp.open("GET", "ajax.php?"+params, true); 
       xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
       //console.log(params); 
       xmlhttp.send(params); 

      } 
sendAjax('gapps','example.com','gapps'); 
+0

PHPスクリプトから返されるヘッダは何ですか?キャッシングが許可されていないことを確認し、適切なコンテンツタイプを返します。 – mariusnn

答えて

26

ブラウザのキャッシュが異なる設定で動作が異なります。ユーザー設定やユーザーのブラウザーに依存しないでください。ブラウザがヘッダを無視するようにすることも可能です。

キャッシュを防止するには2通りの方法があります。

- > AJAXリクエストをPOSTに変更します。ブラウザーはPOST要求をキャッシュしません。

- >ベターウェイ&良い方法:リクエストに現在のタイムスタンプまたはその他の固有番号のいずれかのパラメータを追加します。

params = "action=" + action 
     + "&domain=" + encodeURIComponent(domain) 
     + "&preventCache="+new Date(); 
+0

私はこれを解決策として考えていましたが、私はそれが不愉快だと思いました。ありがとう! :) – Mattisdada

+1

ちょうど情報と安心のため。このソリューションは、preventCache to ajaxという1つの例をDOJOと呼ぶとき、主要なフレームワークで使用されます。日付の代わりにいくつかの番号を追加 – gaurang171

+0

本当ですか?これは私にとって「ハッキーな」方法のように思えますが、それはうまくいく(偉大な)が、私はそれを「公式」にするより良い方法があると思っていただろう。再度、感謝します! :) – Mattisdada

11

Javascriptのソリューションへの別の代替カスタムヘッダーを使用することです: PHPで、それは次のようになります。コードの行の下

<?php 
    header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");//Dont cache 
    header("Pragma: no-cache");//Dont cache 
    header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");//Make sure it expired in the past (this can be overkill) 
?> 
+0

これはすべてのブラウザで機能しますか?もしそうなら、これはクエリのparamハックよりも**かなり**洗練されたものです。 – tjameson

+1

はい、それはすべてのブラウザで動作します:) – Mattisdada

0

私のために働きました。

$.ajaxSetup({ cache: false }); 
関連する問題