2013-02-23 17 views
16

Così sto facendo questo piccolo progetto e sto avendo qualche problema con la cattura. Una cosa che non funziona è che il browser continua a memorizzare nella cache il file json che contiene i dati di salvataggio e quando aggiorno il json da qualche altra parte, il browser torna alla vecchia versione del file json che ha memorizzato nella cache e lo legge. Sfortunatamente non lo voglio. Non voglio che il browser memorizzi il file in modo che ogni volta che carica la pagina, chiederà al server il file json e agirà in base a quel file invece del file che ha memorizzato nella cache. Vorrei comunque essere in grado di memorizzare nella cache tutte le altre cose che sono nella pagina, ma se questo deve essere sacrificato perché funzioni, allora è un sacrificio che sono disposto a fare. Sto immaginando che in JavaScript che ci sarebbe stata una chiamata che dice scartare il file JSON corrente e andare chiedere al server di nuovo per esso o qualcosa di simileCome impedire al browser di memorizzare nella cache un file json

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

o qualcosa del genere per aiutarmi a realizzare quello che ho' Sto parlando di ... aiuto?

+0

** caching ..... – arqam

risposta

33

Il modo più semplice è quello di aggiungere la stringa di origine con alcuni parametri casuale, che viene ignorato dal lato server

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

Una soluzione potrebbe essere quella di produrre l'elemento script utilizzando Javascript e aggiungere l'ora attuale come questo :

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

in questo modo, il browser non sarà mai memorizzare nella cache il file JSON come sembra essere un file diverso (a causa del parametro) in ogni chiamata.

+0

così invece di avere un tag nell'intestazione che ha un src di mySaveFiles chiamerei qualcosa come il codice che hai fornito lì in una funzione che prima viene eseguita quando la pagina viene caricata e sarebbe essere il modo in cui l'ho descritto? –

+0

@MuggyAte Fondamentalmente sì, – Sirko

+0

Grazie. Ho provato alcuni degli altri metodi che sono stati suggeriti da alcune delle altre persone, ma questo sembra essere il più riuscito nel realizzare ciò che volevo. grazie –

0

se non volete memorizzare nella cache tutti i dati, è possibile utilizzare il meta tag sotto

<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="expires" content="-1"> 
+0

Beh, sarebbe sii gentile se posso memorizzare tutto tranne il file json. L'ho già provato ma sembra che riduca notevolmente le prestazioni.Penso che questa sarà la mia ultima risorsa se riesco a trovare l'alternativa migliore :( –

+0

Questo aiuto per l'arresto della cache nel file JSON? È per la singola pagina HTML, giusto? @Ranjith – Vaishak

2

due opzioni:?

  1. Aggiungi un mySaveFiles.json t = parametro di query timestamp fino alla fine dell'URL.
  2. Estrarre il file con l'oggetto XmlHttpRequest (potrebbe essere necessario aggiungere un timestamp a seconda del server).
6

Uno dei miei preferiti è solo .htaccess (se questo è possibile per voi, non vedo che)

disabilitare la cache per più estensioni

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

disabilitare la cache per appena 1 prolunga

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

ho trovato qui: http://www.queness.com/post/5421/17-useful-htaccess-tricks-and-tips

+0

Oh wow questa è una soluzione fantastica, devo provarla fuori in questo momento :) speriamo che questo sia più semplice di dover aggiungere un timestamp alle cose oo –

+0

ok sto incontrando un problema qui. l'ho incollato e ho filtrato le cose che non desidero, ma nella parte superiore della pagina c'è questa riga di testo che dice che Header non controlla Cache-Control e non voglio che quella riga di testo si mostri. Cosa faccio? –

+0

Cosa hai incollato esattamente nel tuo codice? Aggiornamento per disabilitare la cache per 1 estensione –

Problemi correlati