Les outils de développement YSlow et Chrome vous avertiront si vous utilisez des requêtes POST pour AJAX - généralement GET devrait être la méthode préférée, sauf si vous avez vraiment besoin de POST.
Vous pouvez désactiver la mise en cache globalement en utilisant $.ajaxSetup(), par exemple:
$.ajaxSetup({ cache:false});
Cela ajoute un horodatage à la chaîne de requête lors de la demande. Pour désactiver le cache pour un $.ajax()appel particulier , définissez- cache: falsele localement, comme ceci:
J'aimerais avoir déjà vu cet élément de configuration globale. Cela m'a juste évité d'avoir à mettre à jour des dizaines d'appels individuels.
James Skemp
2
Je sais que c'est une vieille réponse, je me demande simplement si cela affecte tous les appels comme ajax (ajax, get et post) ou seulement des appels ajax spécifiques?
Lumpy
6
@Lumpy, selon la documentation de jQuery.ajax () , cache: falsene fonctionnera correctement qu'avec les requêtes HEAD et GET. En outre, si vous définissez cache: falsedans $.ajaxSetup, selon la documentation jQuery.ajaxSetup () , il sera « définir des valeurs par défaut pour les futures demandes Ajax. » Alors oui, cela désactivera le cache pour toutes les futures requêtes HEAD et GET AJAX.
John Washam
11
Un mot d'avertissement: cela ajoute "? _ = Somenumber" à votre URL. Assurez-vous que votre serveur principal peut ignorer le "_" dans les paramètres de requête de l'URL.
4
+1 pour cache: false. Désactiver la mise en cache à l'échelle mondiale semble exagéré, mais avoir un contrôle par demande est parfait. Merci
Gone Coding
21
Si vous définissez des paramètres uniques, le cache ne fonctionne pas, par exemple:
$.ajax({
url :"my_url",
data :{'uniq_param':(newDate()).getTime(),//other data}});
C'est ce que cachefait déjà le paramètre dans les coulisses.
Jose Rui Santos
Le code ajaxSetup ci-dessus n'a pas fonctionné pour moi, n'a pas passé beaucoup de temps à comprendre pourquoi. Les variables globales sont mauvaises et parfois vous voulez mettre en cache. Cette réponse est la meilleure à mon avis.
bladefist
@bladefist, vous semblez avoir rencontré le même problème que moi. Savez-vous s'il existe d'autres options que la modification des données pour empêcher IE de mettre en cache? La raison pour laquelle je demande, c'est parce que mes demandes n'utilisent pas réellement les «données» et toutes les données vont de pair avec l'URL.
badri
1
En fait, c'est sûrement ce que le cache devrait faire en arrière-plan selon ces informations de - api.jquery.com/jquery.ajax cache (par défaut: true, false pour dataType 'script' et 'jsonp') Type: Boolean Si défini à faux, cela forcera les pages demandées à ne pas être mises en cache par le navigateur. Remarque: La définition du cache sur false ne fonctionnera correctement qu'avec les requêtes HEAD et GET. Il fonctionne en ajoutant "_ = {timestamp}" aux paramètres GET.
badri
@bladefist Il indique clairement qu'il va ajouter un horodatage aux paramètres GET. alors demandez-vous pourquoi le code fourni par Koss fonctionne pour vous et que la désactivation du cache local ou global ne fonctionne pas?
badri
12
Cache-Control:no-cache,no-store
Ces deux valeurs d'en-tête peuvent être combinées pour obtenir l'effet requis sur IE et Firefox
Le problème est qu'IE n'écoute pas toujours ça, malheureusement :)
Nick Craver
1
@ Nick, c'est sûr? je n'ai pas testé ce Cache-Control. Est-ce que Jquery Ajax chache fonctionne sur tous les navigateurs?
7
Cela devrait fonctionner sur tous les navigateurs, oui ... mais parfois IE aime juste mettre l'enfer hors des choses
Nick Craver
@Nick - J'ai défini le cache ajax sur false, mais le message de succès ajax n'a pas été obtenu dans IE et également dans FF. Pouvez-vous s'il vous plaît vérifier mon code? mon code est-il faux? Merci var ajaxfile = base + "index.php / msc / popup_view /" + obj + "/" + id + "/" + no_tab; $ .ajax ({type: "GET", url: ajaxfile, // contentType: "application / json; charset = utf-8", cache: false, success: function (msg) {$ ("# popup"). html (msg);}});
SABU
Je viens de confirmer qu'IE11 ignore cet en-tête. Chrome a également lancé une erreur CORS.
L'idée est d'ajouter un paramètre à votre requête ajax contenant par exemple la date du jour une heure, afin que le navigateur ne puisse pas le mettre en cache.
Réponses:
Vous pouvez désactiver la mise en cache globalement en utilisant
$.ajaxSetup()
, par exemple:Cela ajoute un horodatage à la chaîne de requête lors de la demande. Pour désactiver le cache pour un
$.ajax()
appel particulier , définissez-cache: false
le localement, comme ceci:la source
cache: false
ne fonctionnera correctement qu'avec les requêtes HEAD et GET. En outre, si vous définissezcache: false
dans$.ajaxSetup
, selon la documentation jQuery.ajaxSetup () , il sera « définir des valeurs par défaut pour les futures demandes Ajax. » Alors oui, cela désactivera le cache pour toutes les futures requêtes HEAD et GET AJAX.cache: false
. Désactiver la mise en cache à l'échelle mondiale semble exagéré, mais avoir un contrôle par demande est parfait. MerciSi vous définissez des paramètres uniques, le cache ne fonctionne pas, par exemple:
la source
cache
fait déjà le paramètre dans les coulisses.Ces deux valeurs d'en-tête peuvent être combinées pour obtenir l'effet requis sur IE et Firefox
la source
Voici une proposition de réponse:
http://www.greenvilleweb.us/how-to-web-design/problem-with-ie-9-caching-ajax-get-request/
L'idée est d'ajouter un paramètre à votre requête ajax contenant par exemple la date du jour une heure, afin que le navigateur ne puisse pas le mettre en cache.
Jetez un oeil sur le lien, il est bien expliqué.
la source
cache
fait déjà le paramètre dans les coulisses.vous pouvez le définir comme ceci:
ou comme ça:
J'espère que ça aide
la source
Il s'agit d'un ancien message, mais si IE vous pose problème. Modifiez vos demandes GET en POST et IE ne les mettra plus en cache.
J'ai passé beaucoup trop de temps à comprendre cela à la dure. J'espère que ça aide.
la source
cache:false
au cas par cas est la voie à suivre.