ti-enxame.com

Como impedir que o navegador armazene em cache um arquivo json

Então, eu estou fazendo esse pequeno projeto e estou tendo alguns problemas com a captura. Uma coisa que não está funcionando é que o navegador continua armazenando em cache o arquivo json que contém os dados salvos e, quando eu atualizo o json em outro lugar, o navegador volta à versão antiga do arquivo json que ele armazenou em cache e o lê. Infelizmente eu não quero isso. Eu não quero que o navegador armazene em cache o arquivo, para que, toda vez que carregar a página, ele solicite ao servidor o arquivo json e atue de acordo com esse arquivo, em vez de qualquer arquivo que ele tenha armazenado em cache. No entanto, eu gostaria de poder armazenar em cache todas as outras coisas que estão na página, mas se isso tiver que ser sacrificado para que isso funcione, é um sacrifício que estou disposto a fazer. Estou imaginando que, em JavaScript, haveria uma chamada que descarte o arquivo json atual e vá pedir novamente ao servidor ou algo assim

<script src="mySaveFiles.json" cache="no"> 

ou algo do tipo para me ajudar a alcançar o que estou falando ... ajuda?

18
Muggy Ate

A maneira mais fácil é anexar a string de origem com algum parâmetro aleatório, que é ignorado no lado do servidor

<script src="mySaveFiles.json?nocache=123" ></script>

Uma solução seria gerar o elemento de script usando JavaScript e acrescentar a hora atual como esta:

var el = document.createElement( script );
el.src = 'mySaveFiles.json?nocache=' + (new Date()).getTime();
document.head.appendChild( el );

Dessa forma, o navegador nunca armazenará em cache o arquivo JSON, pois parece ser um arquivo diferente (devido ao parâmetro) em cada chamada.

40
Sirko

Um dos meus favoritos é apenas htaccess (se isso for possível para você, não vejo isso)

Desativar cache para várias extensões

<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi|json)$">
    Header unset Cache-Control
</FilesMatch>

Desativar cache para apenas 1 extensão

<Files .json>
    Header unset Cache-Control
</Files>

Eu o encontrei aqui: http://www.queness.com/post/5421/17-useful-htaccess-tricks-and-tips

8
Ron van der Heijden

Duas opções:

  1. Adicione um parâmetro de consulta mySaveFiles.json? T = timestamp ao final do URL.
  2. Puxe o arquivo com o objeto XmlHttpRequest (talvez seja necessário adicionar um carimbo de data e hora, dependendo do servidor).
2
Kevin Seifert