30

アプリをセットアップしましたが、Opera と Firefox ではうまく動作しますが、Google 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');
4

4 に答える 4

35

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

キャッシングを防ぐ方法は 2 つあります。

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

--> 良い方法と良い方法: 現在のタイムスタンプまたはその他の一意の番号を使用して、リクエストに追加のパラメーターを追加します。

params = "action=" + action 
         + "&domain=" + encodeURIComponent(domain) 
         + "&preventCache="+new Date();
于 2012-07-13T04:02:13.713 に答える
15

Javascript ソリューションのもう 1 つの代替方法は、カスタム ヘッダーを使用することです。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)
?>
于 2012-07-15T22:16:50.273 に答える