web-dev-qa-db-ja.com

ブラウザーによるキャッシュの防止AJAXリクエスト

アプリをセットアップしましたが、OperaとFirefoxで素晴らしい動作をしますが、Google ChromeではAJAXリクエストをキャッシュし、古いデータを提供します!

http://gapps.qk.com.a はアプリです。 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');
27
Mattisdada

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

キャッシュを防ぐには2つの方法があります。

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

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

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

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)
?>
14
Mattisdada

この問題が発生したとき、jQuery ajaxリクエストを使用していました。

jQuery API によると、「cache:false」を追加すると、受け入れられた回答で説明されているようなタイムスタンプが追加されます。

これはGETとHEADリクエストでのみ機能しますが、POSTを使用している場合、ブラウザーはajaxリクエストをキャッシュしません。IE8には、必要に応じてリンクで確認してください。

$.ajax({ 
type: "GET",
cache: false, 
});
1
iknownothing

以下のコード行は私のために働きました。

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