7
versión

CodeIgniter '2.0.3' jQuery 1.7 historia plugin de jQueryJquery.get() no funciona en IE8/9. no se puede cargar páginas en caché 304 no modificado

Hola chicos,

Tengo una aplicación CodeIgniter que he construido en una ajax Moda. Tengo una función de la siguiente manera:

$(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'); 
}); 

Todo lo que hace que captura los clics en los elementos de anclaje con una clase de ajax_link y envía la respuesta a una función que se encarga de la colocación de que los datos de respuesta en la página.

Esto funciona en Chrome y FF. Hago clic en el enlace, jQuery hace la solicitud de obtención, obtengo un objeto JSON y mi función history.pushState() inyecta algunos de los datos json en mi página.

El problema que tengo está en IE8. Esencialmente, lo que sucede es que cuando abro la aplicación por primera vez, los enlaces funcionan pero solo funcionan una vez. La segunda vez que hago clic en un enlace que:

  • ¿El Ajax GET
  • recibe una respuesta de 304 (no modificado)
  • no llama a la función de devolución de llamada jQuery.get() y por lo tanto se para en seco.

Si limpio el caché, funciona de nuevo. Así que mi suposición es que IE está haciendo la solicitud de obtención, pero luego ve que ya se ha solicitado ese mismo archivo en el pasado ... y así detiene el proceso por completo.

¿Alguien sabe de una solución a esto? He echado un vistazo a las menciones de 304 errores y errores con ajax y el almacenamiento en caché en IE, pero aún no he encontrado un problema idéntico al mío.

Cualquier ayuda muy apreciada

(Probado en una Máquina Virtual Windows Internet Explorer 8, y el IE 8 Modo en Internet Explorer 9)

Resuelto

sólo tenía que añadir el siguiente código a mi documento .actualizada y el problema desapareció.

$.ajaxSetup ({cache: false}); 

Respuesta

5

cambiar esta línea:

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

A esto:

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

Esto se llama un "CacheBuster" y efectivamente crea una URL similar a: número aleatorio

"website.com/page.html?1241233" 

Eso será diferente para cada clic de ".ajax_link", por lo que IE creerá que es una página nueva y la obtendrá correctamente.

+0

Gracias por su respuesta, lo siento, me tomó tanto tiempo para aceptarlo. Esta fue de hecho la solución que necesitaba. –

+0

vea también: http://stackoverflow.com/questions/1013637/unexpected-caching-of-ajax-results-in-ie8 – Costa

0

Tuvimos un problema con IE (y Opera) no le gusta "application/json", donde tenemos que hacer que la respuesta no es "text/plain".

+0

gracias por su sugerencia. Pude resolver el problema colocando lo siguiente en mi función document.ready: $ .ajaxSetup ({cache: false}); –

Cuestiones relacionadas