7

codeigniter versione '2.0.3' Jquery 1,7 Jquery di storia del pluginJquery.get() non funziona in IE8/9. non caricare le pagine nella cache 304 non modificati

Ciao ragazzi,

Ho un app CodeIgniter che ho costruito in un Ajax moda. Ho una funzione come segue:

$(document).on('click','.ajax_link',function(e){ 
    //Stop the normal href action 
    e.preventDefault(); 

    //Grab the destination URL 
    var new_url = $(this).attr('href') 

    //Grab the content via ajax and pass it to the history change function 
    $.get(base_url+new_url,function(data){ 
     History.pushState({ 
      content:data.content, 
      url:data.url 
     }, data.title, data.url); 
     //Refresh some site variables 
     refresh(); 
    },'json'); 
}); 

Tutto ciò che fa cattura clic su elementi di ancoraggio con una classe di ajax_link e invia la risposta a una funzione che gestisce il posizionamento dei dati di risposta che nella pagina.

Questo funziona in Chrome e FF. Clicco sul link, jQuery fa la richiesta get, torno un oggetto JSON e la mia funzione history.pushState() inserisce alcuni dei dati json nella mia pagina.

Il problema che ho è in IE8. Essenzialmente ciò che accade è quando apro l'app per la prima volta, i collegamenti funzionano ma funzionano una sola volta. La seconda volta ho clic su un collegamento che:

  • Fa l'ajax GET
  • riceve una risposta di 304 (Not Modified)
  • non chiama la funzione di callback jQuery.get() e si ferma quindi morti.

Se svuoto la cache funziona di nuovo. Quindi la mia ipotesi è che IE stia facendo la richiesta get, ma poi vede che è già stato richiesto esattamente lo stesso file nel passato ... e quindi interrompe completamente il processo.

Qualcuno sa di una soluzione a questo? Ho dato un'occhiata a menzioni di 304 errori ed errori con ajax e caching in IE ma non ho ancora trovato un problema identico al mio.

Qualsiasi aiuto molto apprezzato

(testato su Windows Virtual Machine IE8 e IE 8 Modalità di Internet Explorer 9)

Risolto

solo bisogno di aggiungere il seguente codice al mio documento funzione .ready e il problema è scomparso.

$.ajaxSetup ({cache: false}); 

risposta

5

Modifica questa linea:

var new_url = $(this).attr('href') 

A tal:

var new_url = $(this).attr('href') + '?' + Math.random(); 

Questo è chiamato un "CacheBuster" ed effettivamente crea un URL simile a:

"website.com/page.html?1241233" 

Quello di numeri casuali sarà diverso per ogni clic di ".ajax_link", quindi IE penserà che sia una nuova pagina e ottenerla correttamente.

+0

Grazie per la tua risposta, mi dispiace, mi ci è voluto così tanto tempo per accettarlo. Questa era davvero la soluzione di cui avevo bisogno. –

+0

vedere anche: http://stackoverflow.com/questions/1013637/unexpected-caching-of-ajax-results-in-ie8 – Costa

0

Abbiamo avuto un problema con IE (e Opera) non ama "application/json", dove dobbiamo rendere la risposta come "text/plain".

+0

grazie per il vostro suggerimento. Sono riuscito a risolvere il problema inserendo quanto segue nella mia funzione document.ready: $ .ajaxSetup ({cache: falso}); –

Problemi correlati