74 votes

Comment définir le paramètre cache : false dans l'appel jQuery.get ?

jQuery.get() est un raccourci pour jQuery.ajax() avec un appel get. Mais quand je mets cache:false dans les données de la .get() ce qui est envoyé au serveur est un paramètre appelé cache avec une valeur de false. Bien que mon intention soit d'envoyer un horodatage avec les données au serveur pour éviter la mise en cache, ce qui se produit si j'utilise la fonction cache: false dans les données jQuery.ajax. Comment puis-je y parvenir sans réécrire mes appels jQuery.get en appels jQuery.ajax ou sans utiliser le logiciel

$.ajaxSetup({
    // Disable caching of AJAX responses
    cache: false
});

Mise à jour : Merci à tous pour les réponses. Vous avez tous raison. Cependant, j'espérais qu'il y avait un moyen de faire savoir à l'appel get que vous ne voulez pas mettre en cache, ou d'envoyer cette valeur à la fonction sous-jacente .ajax() afin qu'elle sache quoi en faire.

J'ai. cherché une quatrième voie autre que les trois voies qui ont été identifiées jusqu'à présent :

  1. Le faire de manière globale via ajaxSetup

  2. Utilisation d'un appel .ajax au lieu d'un appel .get

  3. Il faut le faire manuellement en ajoutant un nouveau paramètre contenant un horodatage à votre appel .get.

Je pensais juste que cette capacité devrait être intégrée dans l'appel .get.

98voto

Kevin B Points 57721

Ajoutez le paramètre vous-même.

$.get(url,{ "_": $.now() }, function(rdata){
  console.log(rdata);
});

Depuis jQuery 3.0, vous pouvez le faire :

$.get({
  url: url, 
  cache: false
}).then(function(rdata){
  console.log(rdata);
});

64voto

Jivings Points 10892

Je pense que vous devez plutôt utiliser la méthode AJAX qui vous permet de désactiver la mise en cache :

$.ajax({
  url: "test.html",
  data: 'foo',
  success: function(){
    alert('bar');
  },
  cache: false
});

36voto

James Montagne Points 44517

Pour moi, la manière correcte de procéder serait celle qui est indiquée. Soit ajax o ajaxSetup . Si vous voulez vraiment utiliser get et ne pas utiliser ajaxSetup vous pourriez alors créer votre propre paramètre et lui donner la valeur de la date/heure actuelle.

Je m'interroge toutefois sur les raisons qui vous poussent à ne pas utiliser l'une des autres méthodes.

7voto

Thomas Kelley Points 4963

Selon la documentation de JQuery, .get() ne prend que le url , data (contenu), dataType y success comme paramètres. Ce que vous cherchez vraiment à faire ici est de modifier l'objet jqXHR avant qu'il ne soit envoyé. Avec .ajax() Cette opération est réalisée à l'aide de la fonction beforeSend() méthode. Mais comme .get() est un raccourci, il ne le permet pas.

Il devrait être relativement facile de changer votre .ajax() appels à .get() appels cependant. Après tout, .get() est juste un sous-ensemble de .ajax() Vous pouvez donc probablement utiliser toutes les valeurs par défaut de l'option .ajax() (sauf, bien sûr, pour beforeSend() ).

Editar:

:Regarde la réponse de Jivings: :

Ah oui, j'ai oublié le cache paramètre ! Alors que beforeSend() est utile pour ajouter d'autres en-têtes, la fonction intégrée cache est beaucoup plus simple ici.

5voto

Sangeet Shah Points 2739

Définir le cache : false dans l'appel jQuery.get en utilisant la méthode ci-dessous

utiliser les nouvelles Date().getTime(), ce qui évitera les collisions, à moins que plusieurs demandes ne se produisent dans la même milliseconde.

Ou

Ce qui suit empêchera la mise en cache de toutes les futures demandes AJAX, quelle que soit la méthode jQuery utilisée ($.get, $.ajax, etc.).

$.ajaxSetup({ cache: false });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X