Impedire la memorizzazione nella cache del browser del risultato della chiamata AJAX


262

Sembra che se carico il contenuto dinamico utilizzando $.get(), il risultato viene memorizzato nella cache nel browser.

L'aggiunta di una stringa casuale in QueryString sembra risolvere questo problema (io uso new Date().toString()), ma questo sembra un trucco.

C'è un altro modo per raggiungere questo obiettivo? Oppure, se la stringa univoca è l'unico modo per raggiungere questo obiettivo, qualche suggerimento diverso da new Date()?


Puoi usare la notazione breve $.now()invece di fare una (nuova data (). GetTime ()) ogni volta.
Dayson,

1
Il titolo della tua domanda è un po 'fuorviante. Potresti considerare di rinominarlo?
0112

4
Hai considerato di selezionare un'altra risposta come quella accettata?
M4N,

Risposte:


241

Io uso new Date().getTime(), il che eviterà le collisioni a meno che non si verifichino più richieste nello stesso millisecondo:

$.get('/getdata?_=' + new Date().getTime(), function(data) {
    console.log(data); 
});

Modifica: questa risposta ha diversi anni. Funziona ancora (quindi non l'ho eliminato), ma ci sono modi migliori / più puliti per raggiungere questo obiettivo ora . La mia preferenza è per questo metodo, ma questa risposta è utile anche se si desidera disabilitare la memorizzazione nella cache per ogni richiesta durante la vita di una pagina.


11
Sottovaluterò solo perché è più pulito lasciare che jQuery faccia questo come nella risposta di Peter J. La tua soluzione funzionerà, ma è più difficile da mantenere a lungo termine.
Niklas Wulff,

11
Quale parte di questo richiede manutenzione? Rispetto a ciò che fa jQuery?
Sunny R Gupta,

5
Può valere la pena notare che il new Date().getTime()codice è utilizzato come questo ... var nocache = new Date().getTime(); var path = 'http://hostname.domain.tld/api/somejsonapi/?cache=' + nocache;. Mi ci sono voluti alcuni minuti per capirlo, me stesso. Ovviamente ?cachepotrebbe essere qualsiasi espressione che l'API in realtà non desidera.
doubleJ

1
+1 anche la risposta di Peter J con un approccio migliore questa risposta non è sbagliata né è una cattiva risposta. Credo che i DV siano fatti perché il tuo è al di sopra di quello di Peter (come accettato). e il PO non appare su SO dall'inizio del 2013
Michel Ayres,

1
url = url + (-1 === url.indexOf('?') ? '?' : '&') + "__=" + Number(new Date());
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.