2009-06-04 12 views
9

Come impedire ai browser di memorizzare nella cache i risultati Ajax? Ho e evento attivato script Ajax i risultati dei display solo quando i dati del browser è stato cancellato.Come evitare la cache dei risultati Ajax/javascript nei browser?

Testato in IE6 e Firefox 3.0.10

+2

in realtà, questo è un problema abbastanza ben documentato. Sono sicuro che puoi trovare una risposta molto completa se cerchi Google. – jrharshath

risposta

11

aggiungere una stringa di query casuale per l'URL che si sta inviando.

E.g. se la richiesta Ajax viene inviata a "http://www.xyz.com/a" quindi aggiungere una stringa casuale alla fine: "http://www.xyz.com/a?q=39058459ieutm39"

+3

... ed è possibile generare la stringa casuale in javascript per esempio in questo modo: Math.floor (Math.random() * 1000000) – Manne

+2

Questa soluzione ha un grave svantaggio: riempie la cache se si recuperano molti file. Nel mio caso, voglio conservare la cache per l'utilizzo offline, quindi non voglio riempirla con le vecchie versioni della richiesta. –

4

ci sono due tecniche per questo che io sappia.

  • Aggiungere una sorta di stringa di query all'URL di richiesta AJAX in modo che sia sempre univoco. Un timestamp millisecondo (magari in combinazione con un valore casuale) è buono per questo intestazioni
  • Set di controllo della cache HTTP sulla risposta AJAX in modo che il browser non memorizza nella cache è
13

L'URL casuale funziona, ma è una specie di un hack. HTTP ha soluzioni integrate che dovrebbero funzionare. Prova a utilizzare la soluzione indicated here. Fondamentalmente, imposta le intestazioni:

"Pragma":   "no-cache", 
"Cache-Control":  "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", 
"Expires":   0, 
"Last-Modified":  new Date(0), // January 1, 1970 
"If-Modified-Since": new Date(0) 
+0

Perfetto, grazie. (Anche se sembra strano che le intestazioni siano impostate sul client piuttosto che nella risposta dal server!) –

+0

Ottengo un errore nel tentativo di implementare la soluzione: 'richiesta praga di intestazione campo non è consentita da" access-control- allow-headers "'. Qualche idea su come evitare questo? Guarda: http://stackoverflow.com/questions/23048184/xmlhttprequest-with-no-cache-request-header-is-not-allowed –

+0

Una chiamata che stavo facendo fallirebbe quando si passa un numero casuale attraverso la stringa di query. Non ho creato il servizio ma sembrava che stesse cercando di interpretare ogni parametro. Questa è stata la soluzione perfetta, grazie! – hack3rfx

4

utilizzando jQuery è possibile impostare l'impostazione globale dell'ajax: {cache: falso}. Vedi in jquery ajax docs

8

Ho usato il metodo jQuery {cache: falso} e ha funzionato come un fascino.

L'esempio di codice completo è come questo:

$.ajaxSetup({cache: false}); 
+0

questo è fantastico! stringa di query casuale non funziona. – Brent81

+0

E per me, solo una stringa casuale ha funzionato! – user984003

+0

ajaxSetup funziona solo per chiamate Ajax. Per altre chiamate JS, potrebbe essere necessario aggiungere la modifica casuale delle stringhe di querystring. –

Problemi correlati