2012-01-19 13 views
10

utilizo getScript para cargar dinámicamente mi plugin:

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js', function() { 
    //do magic 
}); 
  1. ¿Cómo desactivo el almacenamiento en caché que revienta? Por el momento se genera números al final:? Js/code.photoswipe.jquery-3.0.4.min.js _ = 1326992601415 vi esto, pero no está seguro de cómo usarlo en mi caso:

    $.getScript = function (url, callback, cache) { 
        $.ajax({ 
         type: "GET", 
         url: url, 
         success: callback, 
         dataType: "script", 
         cache: cache 
        }); 
    }; 
    
  2. Si llamo $ .getScript varias veces al agregar el mismo archivo js, ​​¿solicita cada vez obtener ese archivo? Si es así, ¿hay alguna manera de verificar si ya importamos ese script, por lo que podríamos evitar llamar de nuevo a getScript para el mismo archivo?

+0

_Si invoco $ .getScript varias veces al agregar el mismo archivo js, ​​¿solicita? cada vez para obtener ese archivo? _ Sin almacenamiento en caché, las solicitudes por separado se envían debido a la memoria caché. Con el almacenamiento en caché, se cargará desde el caché del navegador (es posible que el navegador verifique con el servidor si tiene la copia más reciente, dependiendo de qué tan fuertes sean los encabezados del caché). –

Respuesta

-3

Su navegador cacheará la url en consecuencia ya .. Así que usted no tiene que preocuparse por el almacenamiento en caché.

Sin embargo si quieres para reventar la caché sólo tiene que añadir una cadena aleatoria a la url de esta manera:

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js?' + Math.random(), function() { 
     //do magic 
}); 

?' + Math.random() permitirá un número aleatorio para añadir a su archivo js modo de almacenamiento en caché se rompe con cada solicitud para el archivo (ya que genera un número al azar)

+8

no, no lo hace. Si he dejado decir $ .getScript onClick en la misma página, envía un GET con un número diferente al final, p. js/code.photoswipe.jquery-3.0.4.min.js? _ = 1326992601415 –

+0

lo que quiero hacer, es eliminar estos números al final, y hacer clic para verificar, si ya tengo ese script importado, entonces pude simplemente ignore getScript –

+0

AJAX no utiliza el concepto de 'importación' de scripts. Cada vez que es una nueva llamada, la diferencia es que puede almacenar (o no) esta respuesta –

23

How to disable the cache busting:

$.ajaxSetup({ 
    cache: true 
}); 

que asegurará usuarios agarrar el script desde el servidor solo una vez y desde su caché local a partir de entonces (a menos que la configuración de su navegador evite el almacenamiento en caché).

+1

ADVERTENCIA: Esto habilitará el almacenamiento en caché para cada llamada ajax, no solo su llamada de script. –

4

La respuesta corta es, desafortunadamente, no se puede.

getScript sin embargo se puede anular la siguiente manera:

$.getScript = function(url, callback, cache){ 
$.ajax({ 
     type: "GET", 
     url: url, 
     success: callback, 
     dataType: "script", 
     cache: true 
}); 
}; 

Si se incluye esto en sus js en alguna parte, no va a romper el código existente, y también almacenar en caché el guión inverosímil.

Advantage
Usando anterior fragmento, se puede activar la caché para todos los scripts en su página. Por lo tanto, no necesita volver a especificar con cada búsqueda de script.

+0

No es necesario. jQuery 1.12.0 y posterior admite pasar un objeto de opciones a '$ .getScript' para que pueda' $ .getScript ({cache: true, url: url}) 'sin anular nada. – oriadam

5

La documentación de jQuery para $ .getScript dicen que es la abreviatura de getScript:

$.ajax({ 
    url: url, 
    dataType: "script", 
    success: success 
}); 

http://api.jquery.com/jQuery.getScript/

Esto significa que sólo tiene que añadir un caché: verdadero parámetro para eso.

$.ajax({ 
    url: url, 
    cache : true, 
    dataType: "script", 
    success: success 
}); 

Simple as that. La función getScript no es nada especial, solo taquigrafía.

1

1. jQuery 1.12.0 y más tarde admite la firma de objeto de opciones:

$.getScript({ 
    url: "foo.js", 
    cache: true 
}) 

2. Suponiendo que establezca cache:true, el archivo se cargará desde la memoria caché del navegador (a menos que la memoria caché esté deshabilitada o expirada, por ejemplo, cuando devtools esté abierto)

+0

Falta esta información en la documentación de jQuery que falta. Abrí una solicitud de extracción para actualizarlo. – oriadam

Cuestiones relacionadas