Requêtes Cache AJAX

J'envoie des requêtes AJAX GET à une application PHP et j'aimerais mettre en cache les retours de la demande pour une utilisation ultérieure.

Puisque j'utilise GET, cela devrait être possible car différentes requêtes demandent différentes URL (par exemple, getHTML.php? Page = 2 et getHTML.php? Page = 5).

Quels en-têtes dois-je déclarer dans l'application PHP pour que le navigateur des clients cache le contenu de l'URL de la requête de manière appropriée? Dois-je déclarer quoi que ce soit dans le Javascript qui gère la demande AJAX (j'utilise la fonction $ .ajax de jQuery qui a un paramètre de cache)?

Comment puis-je gérer les modifications qui modifient le contenu de, par exemple, getHTML.php? Page = 2 afin que le client ne retourne pas à la version en cache? L'ajout d'un autre paramètre à la demande GET, par exemple, getHTML.php? Page = 2 & version = 2 n'est pas possible car le lien vers l'URL demandée est créé automatiquement sans vérification (ce qui est de préférence comme je le souhaite).

Comment le navigateur réagira-t-il lorsque j'essaierai d'AJAX-demander une URL de demande mise en cache? Est-ce que la demande AJAX retournera le succès immédiatement?

Merci

Willem

Ajoutez les en-têtes suivants sur le serveur:

header("Cache-Control: private, max-age=$seconds"); header("Expires: ".gmdate('r', time()+$seconds)); 

Lorsque $ secondes a une signification évidente.

Vérifiez également si votre serveur ne délivre pas d'autres en-têtes anti-cache comme Pragma. Si c'est le cas, ajoutez l'en-tête "Pragma: cache" également.

Une fois que vous avez actualisé la page, vous allez encore faire appel à des serveurs pour le contenu, même si vous les avez déjà demandé. Les en-têtes PHP ne vous aideront pas.

Je pense que vous avez besoin d'un mécanisme de mise en cache côté client du contenu déjà demandé au serveur dans la page actuelle.

Pour ce cas d'utilisation, vous pouvez utiliser une table de hash en JavaScript et la consulter avant d'appeler le serveur. Cela améliorera l'expérience de l'utilisateur puisque l'utilisateur ne devra pas attendre une autre demande de contenu qu'il a déjà vu.

Voici un exemple:

 //placeholder for hash table as cache var cache = []; var getPage = function(pageNr){ if(cache[pageNr]){ //content is already in cache, use it from there handleContent(cache[pageNr]); } else{ //object with parameteres sent with GET request var params = {}; params.page = pageNr; $.ajax({ url: "getHTML.php", data: params, cache: false, success: function(response){ //handle your response here handleContent(response); //store the response in the cache for later use cache[pageNr] = response; } }); } }; 

Maintenant, la demande de pages s'affiche d'abord dans le cache actuel pour voir si vous avez le contenu. Sinon, il fera appel au serveur et enregistrera la réponse dans le cache.

Il est similaire à l'expérience de l'utilisateur lors du défilement des nouvelles dans Google Finance

REMARQUE que si vous actualisez la page, ce cache sera effacé.

En cas d'édition sur une page, vous devrez utiliser les liens de Maurice Perry avec Yahoo Exceptional Performance afin de vous assurer que votre serveur renvoie toujours votre dernière version de contenu.

Plus sur les tables de hash en JavaScript: http://www.mojavelinux.com/articles/javascript_hashes.html