5

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)

risposta

6

Il problema era in realtà Rails: Sia Chrome che IE richiedono l'ultima risposta senza formato specifico, quindi Rails Prende solo il primo blocco di risposta, che è successo nel mio caso. Mettendo il blocco html davanti al blocco JSON risolto il problema.

respond_to do |format| 
    format.html { ... } //important because the request comes with no specific format 
    format.json { ... } 
end 
3

Ho avuto lo stesso problema con Chrome. Il metodo di mio controller ha il format.html

respond_to do |format| 
    format.html 
    format.js 
end 

Sembra che Chrome memorizza nella cache i risultati, così mi è stato in grado di risolvere questo problema con l'aggiunta di una voce di dati alla mia richiesta ajax, in questo modo:

$.ajax({ 
    url: '/restful/path', 
    data: { format: 'js' }, // This line here 
    dataType: 'json' 
}); 

o può passare il formato collegandolo alla fine della richiesta, basta assicurarsi di avere l'opzione (.:format) nel tuo percorso

$.ajax({ 
    url: '/restful/path.js', 
    dataType: 'json' 
}); 

Spero che questo ha lps someone

+0

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

+0

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

Problemi correlati