2012-04-11 7 views
2

サイトのサブページをajax関数で取得しています。すべてがうまくいきます。しかし、コンソールでリクエストを確認したところ、次のレポートが届いています。なぜjquery GETは、想定されるときにキャッシュ結果を表示しないのですか?

Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Connection close 
Content-Length 6663 
Content-Type text/html 
Date Wed, 11 Apr 2012 16:29:51 GMT 
Expires Thu, 19 Nov 1981 08:52:00 GMT 
Pragma no-cache 
Server LiteSpeed 
Vary Accept-Encoding, User-Agent 
X-Powered-By PHP/5.3.10 

内容がキャッシュされていないことを示しています。これは、過去の日付のヘッダーの有効期限を示します。しかし、ajax()のjqueryページでは、デフォルトではすべてのajax呼び出しがキャッシュされています。問題は何ですか?ここに私のコードです

<script type="text/javascript"> 
    $("#subpage1").click(function() { 
    $("#wrapper").empty();  
    $("#wrapper").html('loading'); 
    $.ajax({ 
     url: 'subpage/1.html', 
     success: function(data) { 
      $("#wrapper").html(data); 
     } 
    }); 
}); 
</script> 

私はjqueryとajaxを初めて使っています。

+0

キャッシングがオンになっていることを確認しましたか? \t $ .ajaxSetup({cache:true}); –

+0

@PhillipWhisenhunt:ajax()の説明ページには、デフォルトでキャッシュがtrueと表示されていますか? – user632347

答えて

2

コンソールからの出力を間違って解釈するだけです。サーバーからの応答ヘッダーです。これは、クライアントにその応答をキャッシュに保存しないよう明示的に指示します。

キャッシュする場合は、クライアント側ではなくトランザクションのサーバー側で変更する必要があります。これは、主に正しいヘッダーを送信することによって行われます。将来、有効期限を指定するか、まったく指定しないでください。そしてそれらの "キャッシュ"ヘッダーを削除します。クライアントは次にキャッシュされた要求の日付を(If-Modified-Sinceヘッダー内の)次の要求とと​​もに送信します。その日時以降に変更があったかどうかをスクリプトが確認するだけで済みますコンテンツを通常どおり返却します。それ以外の場合は、httpステータスコード304で修正します。 Googleはキャッシュ制御に関連するhttpヘッダーについて、これは少し難解です。

+0

これはコンテンツがキャッシュされていることを意味しますか?はい、それは応答ヘッダーです。では、コンテンツがキャッシュされていることをどのように確認するのですか? – user632347

+0

必要なサーバー側の変更を教えてください。 – user632347

+0

いいえ、コンテンツがキャッシュされていないことを意味しますが、JavaScriptが何か間違っているからではありません。 – Niko

関連する問題