web-dev-qa-db-fra.com

Comment définir le cache false pour getJSON dans JQuery?

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

 $.ajaxSetup({
                cache: false
            })

Mais je n'obtiens pas les résultats escomptés. Il montre toujours les anciens résultats. Toute aide serait appréciée.

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

70
Abhinav

Votre code n'a besoin que d'un déclencheur pour être activé.

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

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

J'espère que ça aide :)

116
bonesnatch

Vous pouvez utiliser soit ceci, cela va désactiver le cache globalement:

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

ou que, au lieu de $.getJSON, pour désactiver le cache uniquement pour une telle requête:

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

les réponses de semente et de bonesnatch sont correctes, mais si vous voulez utiliser $ .getJSON et ailleurs, profitez de sa mise en cache (vous ne voulez pas définir le cache sur false pour tous les appels), mais vous voulez le décomposer juste pour une appel unique, vous pouvez injecter un horodatage dans la propriété data de $ .getJSON (). En ajoutant une valeur unique à la chaîne de requête de la requête, celle-ci sera toujours unique et ne sera pas mise en cache par le navigateur. Vous obtiendrez toujours les données les plus récentes.

Version longue:

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

$.getJSON(url, data);

Version tout en un:

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

Les deux aboutissent à la requête 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.

38
TriumphST