Tengo el siguiente código haciendo una solicitud GET en una URL:
$('#searchButton').click(function() {
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());
});
Pero el resultado devuelto no siempre se refleja. Por ejemplo, hice un cambio en la respuesta que escupió un seguimiento de la pila, pero el seguimiento de la pila no apareció cuando hice clic en el botón de búsqueda. Miré el código PHP subyacente que controla la respuesta ajax y tenía el código correcto y al visitar la página directamente se mostró el resultado correcto, pero el resultado devuelto por .load era antiguo.
Si cierro el navegador y lo vuelvo a abrir, funciona una vez y luego comienza a devolver la información obsoleta. ¿Puedo controlar esto mediante jQuery o necesito tener mis encabezados de salida de script PHP para controlar el almacenamiento en caché?
Aquí hay un ejemplo de cómo controlar el almacenamiento en caché por solicitud
fuente
Una forma es agregar un número único al final de la url:
Donde escribe uniqueId () para devolver algo diferente cada vez que se llama.
fuente
(+new Date)
(onew Date().getTime()
si es un fanático). Vea ¿Cómo se obtiene una marca de tiempo en JavaScript?Otro enfoque para colocar la línea a continuación solo cuando sea necesario obtener datos del servidor, anexe la línea a continuación junto con su url ajax.
'? _ =' + Math.round (Math.random () * 10000)
fuente
fuente
func.call(elem, data, textStatus, XMLHttpRequest);
Sasha es buena idea, yo uso una mezcla.
Creo una función
E invocar para diferentes partes de mi página, por ejemplo, en init:
Init: function (actionUrl1, actionUrl2, actionUrl3) {
var ExampleJS = {
EjemploJS.LoadWithoutCache (actionUrl2, "div2"); EjemploJS.LoadWithoutCache (actionUrl3, "div3"); }},
fuente
Esto es de particular molestia en IE. Básicamente, debe devolver los encabezados HTTP 'sin caché' con su respuesta del servidor.
fuente
Para PHP, agregue esta línea a su script que sirve la información que desea:
o bien, agregue una variable única a la cadena de consulta:
fuente
NO use la marca de tiempo para crear una URL única, ya que cada página que visita se almacena en caché en DOM por jquery mobile y pronto tendrá problemas para quedarse sin memoria en los móviles.
Este código se activa antes de cargar la página, puede usar url.indexOf () para determinar si la URL es la que desea almacenar en caché o no y establecer el parámetro de caché en consecuencia.
No use window.location = ""; para cambiar la URL, de lo contrario, navegará a la dirección y la página antes de la carga no se activará. Para solucionar este problema, simplemente use window.location.hash = "";
fuente
Si desea seguir con el método .load () de Jquery, agregue algo único a la URL como una marca de tiempo de JavaScript. "+ nueva Fecha (). getTime ()". Tenga en cuenta que tuve que agregar un "& time =" para que no altere su variable pid.
fuente
Puede reemplazar la función de carga jquery con una versión que tenga caché establecida en falso.
Coloque esto en un lugar global donde se ejecutará después de que jquery se cargue y debería estar listo. Su código de carga existente ya no se almacenará en caché.
fuente
Prueba esto:
Funciona bien cuando lo usé.
fuente
Noté que si algunos servidores (como Apache2) no están configurados para permitir o denegar específicamente cualquier "almacenamiento en caché", entonces el servidor puede enviar de forma predeterminada una respuesta "en caché", incluso si configura los encabezados HTTP en "sin caché". Así que asegúrese de que su servidor no esté "almacenando en caché" nada antes de enviar una respuesta:
En el caso de Apache2 tienes que
1) edite el archivo "disk_cache.conf" - para deshabilitar el caché agregue la directiva "CacheDisable / local_files"
2) cargar módulos mod_cache (en Ubuntu "sudo a2enmod cache" y "sudo a2enmod disk_cache")
3) reinicie Apache2 (Ubuntu "sudo service apache2 restart");
Esto debería hacer el truco de deshabilitar el caché en el lado de los servidores. ¡Salud! :)
fuente
Este código puede ayudarte
fuente