2012-04-11 4 views
2

Je récupère mes sous-pages de sites grâce à la fonction ajax. Tout fonctionne bien. Mais quand j'ai vérifié les demandes dans la console, j'obtiens le rapport suivantpourquoi jquery GET ne met pas en cache les résultats quand il est supposé le faire?

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 

Son montrant que le contenu n'est pas caché. Il montre l'expiration de l'en-tête dans une date antérieure. Mais dans la page jquery sur ajax() j'ai lu que par défaut tous les appels ajax sont mis en cache. Quel est le problème? Voici mon code

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

Je suis nouveau à jquery et ajax.

+0

Avez-vous essayé de vous assurer que la mise en cache est activée? \t $ .ajaxSetup ({cache: true}); –

+0

@PhillipWhisenhunt: Dans la page d'explication ajax(), il est dit que le cache est vrai par défaut? – user632347

Répondre

2

Vous interprétez simplement la sortie de la console incorrecte: c'est l'en-tête de réponse du serveur, qui indique explicitement au client de ne pas stocker cette réponse dans le cache.

Si vous souhaitez que le cache soit mis en cache, vous devez effectuer des modifications du côté serveur des transactions, et non du côté client. Cela sera principalement fait en envoyant les bons en-têtes: Fournir une date d'expiration dans le futur ou pas du tout. Et supprimez ces en-têtes "cache". Le client enverra alors la date de la dernière requête mise en cache avec sa prochaine requête (dans un en-tête If-Modified-Since) et vous devrez juste vous assurer que votre script vérifie s'il y a bien eu une modification depuis ce datetime - si c'est le cas , renvoyez le contenu comme d'habitude, sinon répondez simplement avec le code d'état http 304 Non modifié. Google à propos des en-têtes http liés au contrôle du cache, c'est un peu délicat.

+0

ce qui signifie que le contenu est mis en cache? Oui, c'est l'en-tête de réponse. Alors, comment vais-je confirmer que le contenu est mis en cache? – user632347

+0

Pouvez-vous me dire quels changements côté serveur ont besoin de faire? – user632347

+0

Non, cela signifie que le contenu n'est pas mis en cache - mais pas parce que vous faites quelque chose de mal dans votre javascript, mais parce que le serveur dit au navigateur de ne pas le faire. – Niko

Questions connexes