Escenario: estoy creando un módulo de registro de eventos en el que un usuario elegiría una fecha de un calendario para reservar, completar algunos campos de entrada y pagar para reservar la fecha. Uno de los requisitos es que sólo puede haber una reserva por fecha. Esto surge un caso en el que dos personas quieren reservar la misma fecha en el mismo tiempo. Por lo tanto, debemos mostrarle al usuario que vino más tarde a reservar la fecha un mensaje de que ya hay una reserva en curso para esa fecha específica. Vuelva a consultar más tarde .
Para lograr esto, estoy creando una entrada temporal en mi base de datos cada vez que un usuario elige una fecha. Contra esa entrada, puedo mostrar el mensaje al otro usuario que vino después.
Lógicamente, esa entrada tiene que ser borrada si el primer usuario:
De manera que estaría disponible para el segundo usuario que quiera reservar para la misma fecha.
El problema: puedo eliminar la entrada una vez que un usuario cambia la fecha seleccionada. No soy capaz de lograr el segundo. Escribí una función que eliminará la fila y llamará a esa función antes de descargar el evento jQuery. Aparentemente, esa función no funciona con jQuery.
window.onbeforeunload = function(){ deleteTempEntry(); //This sends an ajax call to delete the entry. Not working. alert("The second alert"); // even this alert doesn't work. // I actually intend to use confirm box to make sure to not to delete the entry if the user does not leave the page. confirm("Your current progress will be removed. Are you sure?"); //Calling this return function shows the warning message but none of the other code works. //return 'Are you sure you want to leave?'; };Intenté, bind/on/pure JS pero ninguno de esos parece funcionar.
Como se explica aquí , no hay mucho que pueda hacer con los eventos onbeforeunload/unload por razones de seguridad. ¿Alguna solución para esto?
Gracias.
Necesitaba algo así. Pero desafortunadamente, llamar al backend onBeforenUnload no es confiable. La mayoría de las llamadas AJAX no llegarán al backend (algunas pueden); La única llamada garantizada es con navigator.sendBeacon(url, data) . Envía una solicitud POST incluso si el navegador está cerrado.
Puede publicar datos con async: false así:
$(window).unload(function () { $.ajax({ type: 'POST', async: false, url: 'your url', data: { } }); });Pruebe console.log y regrese en su método onbeforeunload. tal vez el usuario abandone la página antes de que pase su ajax.
Consulte: https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload
Desde el 25 de mayo de 2011, la especificación HTML5 establece que las llamadas a
los comandos pueden ser ignorados durante este evento.