Prima di tutto: $.getJSON back button showing JSON return data not the page non ha aiutato, così come https://groups.google.com/group/angular/browse_thread/thread/3787ad609c0beb77/eb1b57069dab9f63 no e anche Internet non ha aiutato.Pulsante di interruzione JSON in Chrome, pulsante Ricarica in IE (visualizzato come dati nudi)
Ecco il problema:
Chiamo un URL all'interno di una pagina per ottenere i dati JSON, che poi viene reso con jQuery template all'interno di questa stessa pagina.
Immaginate che siamo sulla pagina di http://someurl.com/search e stiamo iniziando una richiesta del genere
$.ajax({
url: '/searchthis', //important, this is NOT THE SAME URL
cache: false,
type: 'GET',
headers: {
"Accept": "application/json",
},
dataType: 'json'
success: function(data) {
doSomethingWithResults(data);
}
});
La risposta Rack è l'intestazione di controllo della cache impostato su no cache:
Cache-Control:no-cache
Tutto funziona bene, ma se lasci la pagina per un'altra pagina in Chrome e premi il pulsante Indietro, ti verranno mostrati i dati JSON nudi. Lo stesso comportamento è presente quando si preme il pulsante di ricarica in IE8. Entrambi funzionano perfettamente se si preme semplicemente Invio sull'URL nella barra degli indirizzi.
Non ricevo come potrei risolvere il problema, perché i ragazzi Chrome non farlo (vedi http://code.google.com/p/chromium/issues/detail?id=108425)
Mi sembra come interpretazioni errate sul lato browser, perché memorizza nella cache qualcosa in realtà dovrebbe no (risposta Intestazione) e memorizza nella cache qualcosa sotto un URL errato (perché la richiesta JSON non ha colpito lo stesso URL)
Stavo riscontrando problemi simili in un'app express. Sembra passare anche un oggetto vuoto in quanto il valore dei dati farà il trucco. Grazie per aver postato questo. – kdetella
Infatti, risolto con l'invio di un formato nei dati. Ho usato 'json', in questo modo:' $ .getJSON (path, {format: "json"}, handler_func (response) {// fa qualcosa}) 'per farlo funzionare – Glenn