5

ブラウザが数分でサーバーにクエリを実行する必要がないように、データをブラウザにキャッシュしたいと考えています。PHP キャッシュ ヘッダーを追加しましたが、機能しないようです。ここに私の ajax コードと php コードがあります: Ajax コード:

function myAjax(name, callback) {
    var url = './php/getJson.php?name=' + encodeURIComponent(name) + '&callback=?';
    jQuery.getJSON(url, function(data) {
        callback(data);
        jQuery.ajaxSetup({ cache: true });
    });
}

PHP コード:

$seconds_to_cache = 3600;
$ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
$lm = gmdate("D, d M Y H:i:s", time() - $seconds_to_cache/2) . " GMT";
header("Last-Modified: $lm");
header("Expires: $ts");
header("Pragma: cache");
header("Cache-Control: public, max-age=$seconds_to_cache");

include_once('getData.php');

$output = $_GET['name'];

echo $_GET['callback'].'('.$output.')';

MitchSlenzaiの助けに感謝します。この問題は解決されました。cache:trueオプションは、ajax クエリおよび古い jquery ライブラリがキャッシュをサポートしない前に設定する必要があります。したがって、最新のjqueryライブラリを使用していることを確認してください

実際の例が必要な人向け:

Ajax コード:

var callback = function(data) {
    alert("callback");
}
function myAjax(name) {
    var url = './php/getJson.php?name=' + encodeURIComponent(name) + '&callback=?';

    jQuery.ajaxSetup({ cache: true });
    jQuery.getJSON(url, function(data) {
        callback(data);
    });
}

PHP コード:

$seconds_to_cache = 3600;
$ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
$lm = gmdate("D, d M Y H:i:s", time() - $seconds_to_cache/2) . " GMT";
header("Last-Modified: $lm");
header("Expires: $ts");
header("Pragma: cache");
header("Cache-Control: public, max-age=$seconds_to_cache");

$output = '{"eventList":["event1","test event"]}';

echo $_GET['callback'].'('.$output.')';
4

2 に答える 2

2

Last-Modifiedヘッダーを1時間前に設定し、を1時間に設定しmax-ageています。

つまり、このデータを送信した時点で、データはすでにキャッシュに許可されている最大経過時間に達しており、後続のリクエストはすべて再送する必要があります。

于 2012-11-06T08:41:32.910 に答える
0

私はあなたのコードに合わせたテスト プロジェクトを作成しました。 http://test-lenzai.rhcloud.com/index.html

ボタンを押すたびに、新しい ajax リクエストが起動されます...クエリは 2 回送信され、ブラウザのキャッシュが使用されます!!!!

これは JQuery が原因です:

  • 最初のクエリが追加されます&_=s135227990...(おそらく何らかのタイムスタンプ)
  • 後続のクエリにはこの追加の引数がなく、すべての同一のクエリが効果的にキャッシュを使用しています。

問題は、1番目と2番目のajaxクエリが同一になるようにjqueryを微調整する方法です

于 2012-11-07T03:50:35.763 に答える