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

jQuery.get() est un raccourci pour jQuery.ajax() avec un appel get. Mais quand je mets en cache:false dans les données de l’appel .get() , ce qui est envoyé au serveur est un paramètre appelé cache avec la valeur false. Alors que mon intention est d’envoyer un horodatage avec les données au serveur pour empêcher la mise en cache, c’est ce qui se passe si j’utilise cache: false dans les données jQuery.ajax. Comment puis-je accomplir cela sans réécrire mes appels jQuery.get aux appels jQuery.ajax ou en utilisant

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

mise à jour: Merci à tous pour vos réponses. Vous êtes tous corrects. Cependant, j’espérais qu’il y avait un moyen de laisser l’appel get savoir 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 a. à la recherche d’une quasortingème voie autre que les trois voies identifiées jusqu’à présent:

  1. Le faire globalement via ajaxSetup

  2. Utiliser un appel au format .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 fonctionnalité devrait être intégrée à l’appel .get.

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

Je remettrais cependant en cause vos motivations à ne pas utiliser l’une des autres méthodes.

Ajoutez le paramètre vous-même.

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

A partir de jQuery 3.0, vous pouvez maintenant faire ceci:

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

Je pense que vous devez 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 }); 

Selon la documentation JQuery, .get() prend uniquement les parameters url , data (content), dataType et success callback. Ce que vous voulez vraiment faire, c’est modifier l’object 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 l’autorise pas.

Il devrait être relativement facile de passer vos .ajax() appels .get() . 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() ).

Modifier:

:: Regarde la réponse de Jivings ::

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

Définir le cache: false dans l’appel jQuery.get en utilisant la méthode Below

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

Ou

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

 $.ajaxSetup({ cache: false }); 

Je suis très en retard dans le jeu, mais cela pourrait aider les autres. J’ai rencontré ce 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 trouvé que vous pouviez simplement utiliser $ .post au lieu de $ .get, qui n’utilise PAS la mise en cache. Aussi simple que cela. 🙂

Notez que la syntaxe de rappel est obsolète :

Avis de déchéance

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 pour leur suppression finale, 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 });