web-dev-qa-db-fra.com

Comment définir le cache: false dans l'appel jQuery.get

jQuery.get() est un raccourci pour jQuery.ajax() avec un appel get. Mais lorsque je définis cache:false Dans les données de l'appel .get(), ce qui est envoyé au serveur est un paramètre appelé cache avec une valeur false. Bien que mon intention soit d’envoyer un horodatage avec les données au serveur pour empêcher la mise en cache, c’est ce qui se produit si j’utilise cache: false Dans les données jQuery.ajax. Comment faire cela sans réécrire mes appels jQuery.get aux appels jQuery.ajax ni utiliser

$.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 serait possible de faire savoir à l'appel get que vous ne voulez pas mettre en cache, ou envoyer cette valeur au fichier .ajax () sous-jacent afin qu'il sache quoi faire avec.

Je un. rechercher une quatrième voie autre que les trois manières identifiées jusqu'à présent:

  1. Le faire globalement via ajaxSetup

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

  3. Faites-le manuellement en ajoutant un nouveau paramètre contenant un horodatage à votre appel .get.

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

72
Barka

Pour moi, la façon correcte de le faire serait celle qui est indiquée. Soit ajax ou ajaxSetup. Si vous voulez vraiment utiliser get et ne pas utiliser ajaxSetup, vous pouvez créer votre propre paramètre et lui donner la valeur de la date/heure actuelle.

Cependant, je m'interroge sur vos motivations en n'utilisant pas l'une des autres méthodes.

35
James Montagne

Ajoutez le paramètre vous-même.

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

Depuis jQuery 3.0, vous pouvez maintenant faire ceci:

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

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

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

Selon la documentation JQuery, .get() ne prend comme paramètres que le rappel url, data (contenu), dataType et success. . Ce que vous cherchez vraiment à faire ici, c'est modifier l'objet jqXHR avant qu'il ne soit envoyé. Avec .ajax(), cela se fait avec la méthode beforeSend(). Mais puisque .get() est un raccourci, il ne le permet pas.

Il devrait être relativement facile de passer vos appels .ajax() à .get() cependant. Après tout, .get() n'est qu'un sous-ensemble de .ajax(), vous pouvez donc probablement utiliser toutes les valeurs par défaut pour .ajax() (sauf bien sûr pour beforeSend()).

Edit:

:: Regarde la réponse de Jivings ::

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

7
Thomas Kelley

Définir le cache: false dans l'appel jQuery.get à l'aide de la méthode Below

utilisez new Date().getTime(),, ce qui évitera les collisions à moins que plusieurs requêtes ne se produisent dans la même milliseconde.

O

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

$.ajaxSetup({ cache: false });
2
Sangeet Shah

Notez que la syntaxe de rappel est obsolète :

Avis de dépréciation

Les méthodes de rappel jqXHR.success (), jqXHR.error () et jqXHR.complete () introduites dans jQuery 1.5 sont obsolètes à partir de jQuery 1.8. Pour préparer votre code en vue de son éventuelle suppression, utilisez plutôt jqXHR.done (), jqXHR.fail () et jqXHR.always ().

Voici une solution modernisée utilisant l'interface promise

$.ajax({url: "...", cache: false}).done(function( data ) {
    // data contains result
}).fail(function(err){
    // error
});
2
mar10

Je suis très en retard dans le jeu, mais cela pourrait aider les autres. J'ai rencontré le même problème avec $ .get et je ne voulais pas désactiver aveuglément la mise en cache et je n'ai pas aimé le correctif d'horodatage. Donc, après quelques recherches, j'ai découvert que vous pouvez simplement utiliser $ .post au lieu de $ .get qui n'utilise PAS la mise en cache. Aussi simple que cela. :)

0
RitchieD