241 votes

Arrêtez la réponse jQuery .load d'être mise en cache

J'ai le code suivant faire une requête GET sur une URL:

$('#searchButton').click(function() {
    $('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());            
});

Mais le résultat n'est pas toujours pris en compte. Par exemple, j'ai fait un changement dans la réponse que cracher une trace de la pile, mais la trace de la pile ne s'affichent pas lorsque j'ai cliqué sur le bouton de recherche. J'ai regardé le sous-jacent de code PHP qui contrôle l'ajax, et il avait le bon code et visiter la page directement a montré le résultat correct mais le résultat retourné par .la charge était vieux.

Si je ferme le navigateur et le rouvrir, il fonctionne une fois puis commence à revenir, les informations périmées. Puis-je contrôler cette par jQuery ou dois-je avoir mon script PHP de sortie des en-têtes de contrôle de la mise en cache?

416voto

John Millikin Points 86775

Vous devez utiliser une fonction plus complexe comme $.ajax() si vous voulez contrôler la mise en cache sur une base par requête. Ou, si vous voulez juste l'éteindre pour tout, mettez ceci en haut de votre script:

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

107voto

Marshall Points 691

Voici un exemple de contrôle de la mise en cache à la demande

 $.ajax({
    url: "/YourController",
    cache: false,
    dataType: "html",
    success: function(data) {
        $("#content").html(data);
    }
});
 

35voto

Lou Franco Points 48823

Une façon consiste à ajouter un nombre unique à la fin de l'URL:

 $('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val()+'&uid='+uniqueId());
 

Où vous écrivez uniqueId () pour renvoyer quelque chose de différent chaque fois qu'il est appelé.

8voto

Gomes Points 419

Une autre approche pour mettre la ligne ci-dessous seulement lorsque vous devez obtenir des données du serveur, Ajoutez la ligne ci-dessous avec votre URL ajax.

'? _ =' + Math.round (Math.random () * 10000)

6voto

Sasha Points 51
/**
 * Use this function as jQuery "load" to disable request caching in IE
 * Example: $('selector').loadWithoutCache('url', function(){ //success function callback... });
 **/
$.fn.loadWithoutCache = function (){
 var elem = $(this);
 var func = arguments[1];
 $.ajax({
     url: arguments[0],
     cache: false,
     dataType: "html",
     success: function(data, textStatus, XMLHttpRequest) {
   elem.html(data);
   if(func != undefined){
    func(data, textStatus, XMLHttpRequest);
   }
     }
 });
 return elem;
}

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