82 votes

Comment définir false cache pour getJSON dans jQuery ?

J'utilise getJSON pour récupérer les résultats du côté serveur mais je suis confronté à des problèmes de cache du navigateur. Je veux que le cache soit faux. J'ai essayé d'utiliser ceci juste avant mon getJSON appeler.

 $.ajaxSetup({
                cache: false
            })

Mais je n'obtiens pas les résultats escomptés. Il affiche toujours les anciens résultats.

J'ai également identifié d'autres solutions comme l'utilisation de .ajax mais je ne veux vraiment pas l'utiliser.

0 votes

133voto

bonesnatch Points 470

Votre code a juste besoin d'un déclencheur pour qu'il soit activé.

Cela vous permettra de désactiver le cache dans tous les futurs ajax.

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

J'espère que cela vous aidera :)

9 votes

Cela la définit globalement, ce qui est mauvais et peut affecter d'autres appels ajax dans votre programme qui faire besoin d'une mise en cache

0 votes

@helloChris - voici une bonne explication de jQuery "Une page ne peut pas être manipulée en toute sécurité tant que le document n'est pas "prêt". jQuery détecte cet état de préparation pour vous. Le code inclus dans $( document ).ready() ne sera exécuté qu'une fois que le Document Object Model (DOM) de la page sera prêt à être exécuté par le code JavaScript." EN SAVOIR PLUS SUR L'API

7 votes

@bonesnatch La plupart du code jQuery aurait besoin de cela, c'est vrai, mais ce paramètre n'a rien à voir avec le DOM. Le document pourrait être dans n'importe quel état lorsque vous effectuez ce réglage et cela ne ferait pas de différence, pour autant que je sache. Il n'y a pas de manipulation de page.

88voto

semente Points 1274

Vous pouvez utiliser l'un ou l'autre, ce qui désactivera le cache de manière globale :

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

ou que, au lieu de $.getJSON pour désactiver le cache uniquement pour ce type de demande :

$.ajax({
    cache: false,
    url: "/path/to.json",
    dataType: "json",
    success: function(data) {
        ...
    }
});

55voto

TriumphST Points 1084

Les réponses de semente et de bonesnatch sont correctes, mais si vous voulez utiliser $.getJSON et profiter ailleurs de sa mise en cache (vous ne voulez pas mettre le cache à false pour tous les appels), mais que vous voulez casser le cache juste pour un seul appel, vous pouvez injecter un timestamp dans la propriété data de $.getJSON(). En ajoutant une valeur unique à la chaîne de requête de la demande, la demande sera toujours unique et ne sera pas mise en cache par le navigateur - vous obtiendrez toujours les dernières données.

Version longue :

var ts = new Date().getTime();
var data = {_: ts};
var url = '/some/path.json';

$.getJSON(url, data);

Tout en une seule version :

$.getJSON('/some/path', {_: new Date().getTime()});

Les deux aboutissent à la demande suivante :

/some/path.json?_=1439315011130 

où le nombre à la fin est l'horodatage du moment où le code est appelé et sera donc toujours unique.

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