Estoy creando una aplicación de prueba en PHP utilizando una base de datos de preguntas MYSQL. La aplicación tiene un temporizador en la parte superior que debe mantener el valor correcto del temporizador cuando la página
window.unload en javascript no funciona para el botón Atrás, cierre de ventana. No pude encontrar ninguna otra solución, así que opté por la solución algo incorrecta para almacenar el valor del temporizador cada N segundos. Por lo tanto, si el usuario realizara alguna de las 4 actividades anteriores, el temporizador se desactivaría en un máximo de N segundos. Esto requiere que ACTUALICE una tabla MYSQL cada N segundos usando ajax.
En el mejor de los casos, N=1, lo que hace que el sitio sea visiblemente más lento. N=3 funciona mejor, pero no estoy contento con él.
Uso setinterval para ejecutar la función ajax cada N segundos
¿Alguna sugerencia aquí? Por favor, sugiera métodos alternativos para lograr mi objetivo que no requieran una base de datos intensiva. No soy un experto en bases de datos, por lo que esto podría ser trivial.
Versión corta de la pregunta
¿Cómo obtengo el control para realizar alguna acción (por ejemplo, almacenar algo en una base de datos) cuando se presiona el botón Atrás o la página se desenfoca?
No está claro qué hace este "temporizador". ¿Cuenta atrás? ¿Contar hasta? ¿Cual es su propósito? Claramente olvidaste explicar esto.
Digamos que es un temporizador de cuenta regresiva, que le dice a la gente cuánto tiempo les queda para hacer el cuestionario. Les das 10 minutos, 600 segundos y simplemente restas un segundo, cada segundo.
Ahora necesita realizar un seguimiento de cada segundo, almacenar ese número en algún lugar y actualizar lo que se almacena, cada segundo.
¿Qué sucede si almacena solo la hora en que comenzó el cuestionario? Di "2022-02-27 15:45:33". Entonces sabrá que el temporizador se reducirá a cero en "2022-02-27 15:55:33". Cuando es "2022-02-27 15:48:03" sabes que han pasado 2,5 minutos: 150 segundos. Al cronómetro le quedan 450 segundos.
Mediante el uso de un punto fijo en el tiempo, almacenado en algún lugar, puede calcular un tiempo relativo, como un temporizador de cuenta regresiva, sin tener que almacenar el valor del temporizador cada segundo.
Una solución para realizar un seguimiento preciso del tiempo es usar http-header .
//after 60s it will move automatically to end_test_page header('Refresh: 60; https://end_test_for_user.php/');Aún así, habrá algunos ajustes en la lógica. Medio:
header('Refresh: 60; https://end_test_for_user.php?id=123') , la identificación se agregará dinámicamente