2011-02-16 10 views
12

Si cargo algo de contenido con ajax (jQuery) que tiene una etiqueta de script, jQuery 1.5 agrega la marca de tiempo a la url del script src. Vea el ejemplo a continuación.jQuery versión 1.5 - ajax - <script> etiqueta timestamp problema

Ejemplo: contenido de lo que me carga con el Ajax:

<div>text1</div> 
<script type="text/javascript" src="/js/abc-xyz.js?r=1.1"></script> 

Esta es la URL src desde donde se carga el código de script después de insertar el contenido previo a la página:

.../js/abc-xyz.js?r=1.1&_=1297892228466 

¿Alguien sabe por qué sucede esto? Sucede solo con jQuery 1.5. No ocurre con jQuery 1.4.4.

Ejemplo de código:

$.ajax({ 
    url: content.html, 
    type: 'GET', 
    data: someDataObject, 
    success: function(data) { 
     // some code here 

    }, 
    error: function(data) { 
     // some code here 
    } 
}); 

Gracias.

+0

Si tengo que tomar una gess salvaje, diría que se añade el parámetro a get evitar que el archivo js se cargue desde el caché. No puedo pensar en ninguna otra razón atm. Pero esto no debería romper ninguna funcionalidad. – Michael

+0

¿Podría mostrar su Javascript? – lonesomeday

+0

Agregué el código JavaScript. –

Respuesta

8

Vea en el siguiente la respuesta lo volví de equipo de jQuery. Ticket # 8298: http://bugs.jquery.com/ticket/8298

Respuesta:

Después de comprobar su informe y sus ejemplos de código llego a la conclusión de que esto no es un error. También hice this test case jQuery 1.4+ (hasta 1.5) tenía un error que causaba que la opción de caché no fuera falsa para las solicitudes de script. Este error (ver #7578) se ha corregido en 1.5. Ahora, lo que usted puede saber o no saber es que jQuery maneja etiquetas de scripts especiales cuando realiza manipulaciones de DOM (para evitar ciertos errores en IE). Los filtra y los solicita a través de ajax. Esto explica por qué incluso una etiqueta de script en línea "normal" se solicita de repente con parámetros de url adicionales. Hay formas de evitar esto si tiene efectos secundarios no deseados para usted.

  1. uso $.ajaxSetup({ cache: true }) cuando sea apropiado

  2. utilizan un prefilter para solicitudes de script y por ejemplo, compruebe las URL donde no desea el parámetro aleatorio que se agregará y configure la caché: verdadero en el prefiltro para aquellos

  3. en, por ejemplo, la llamada de vuelta éxito manejar la escritura de etiquetas sí mismo haciendo algo en este ..

..lines:

var elems = $(htmlwithscripttags); 
elems.filter("script") //now do whatever with the scripts 
elems.filter(":not(script)").appendTo("body"); //e.g. 
+1

'2' funciona bien para mí: ' $ .ajaxPrefilter ('script', función (opciones) { options.cache = true; }); ' – Blaise

7

Michael es correcto en his comment, y si desea desactivarlo, utilice: cache: true en la solicitud de ajax. Para habilitarlo, use cache: false (que creo que es el predeterminado).

Para desactivar la marca de tiempo:

$.ajax({ 
    url: content.html, 
    cache: true, 
    type: 'GET', 
    data: someDataObject, 
    success: function(data) { 
     // some code here 

    }, 
    error: function(data) { 
     // some code here 
    } 
}); 
+0

Sé cómo controlar el almacenamiento en caché. Mi problema es que los anuncios del timestampt al script src url que se cargó con ajax. –

+0

Esto funcionó para mí. ¡Gracias! – kikito

+0

Este problema en nuestro proyecto en el trabajo se debió a que '$ .ajaxSetup ({cache: false})' se agregaba a un complemento al que se llamaba. – theblang

Cuestiones relacionadas