Estoy creando un tablero web y para esto tengo una función javascript que se repite infinitamente, actualizando un div particular a intervalos frecuentes. (usa ajax/jquery para hacer esto).
He usado un bucle con setTimeout:
<!doctype html> <html> <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> <script type="text/javascript" language="javascript"> function updateMain() { setTimeout(function() { console.log("updating"); $('#main').load('new-content.php #main', function() {}); updateMain(); }, 3000) } updateMain(); </script> </head> <body> <div id="main"> <p>hi there</p> </div> </body> </html>'new-content.php' es un archivo que otra parte de mi programa actualiza constantemente para mostrar el nuevo contenido para el tablero. se ve algo como esto:
<div id="main"> <p>Hello i am updated content</p> </div>Estoy seguro de que el ciclo está funcionando ya que los mensajes de "actualización" aparecen a intervalos regulares en la consola.
Cuando se inicia el programa, el div muestra "hola", y en el archivo new-content.php tiene "hola, soy contenido actualizado".
La primera vez que se ejecuta el ciclo, actualiza el div para mostrar "hola, soy contenido actualizado".
Pero si actualizo más el archivo new-content.php, por ejemplo para decir "hola, tengo más contenido actualizado", simplemente no se mostrará en mi página web. Sin embargo, estoy seguro de que el ciclo aún se está ejecutando ya que los mensajes aparecen en la consola.
Es como si ajax tuviera una versión en caché del archivo new-content.php que se carga al principio y luego se sigue usando para siempre.
estoy muy confundida, si me pudieras ayudar te lo agradeceria mucho
Gracias
PD: si es relevante, el sitio web se está ejecutando a través de un matraz, pero no creo que este sea el problema.
EDITAR : creo que en realidad es un problema de almacenamiento en caché del matraz
Puede intentar agregar un destructor de caché para ver si eso ayuda. Cambia tu código de la siguiente manera:
function updateMain() { setTimeout(function() { console.log("updating"); const cb = new Date().getTime(); $('#main').load('new-content.php?cb=' + cb + '#main',function() { updateMain(); }); }, 3000) } updateMain();No pude resolver el problema, pero para cualquier persona que esté tratando de hacer un proyecto similar, decidí usar el matraz-socketio en su lugar, lo que me permite enviar datos a JavaScript para que se muestren en la página, en lugar de que JavaScript cargue los datos en sí. de un archivo. (la respuesta de vladtn en esta publicación SO fue útil como introducción a socketio)