Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

202
Vistas
Enviar una llamada Ajax antes de descargar/descargar

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:

  1. selecciona alguna otra fecha.
  2. cierra su navegador o sale de la página

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.

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

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.

about 4 years ago · Santiago Trujillo Denunciar

0

Puede publicar datos con async: false así:

 $(window).unload(function () { $.ajax({ type: 'POST', async: false, url: 'your url', data: { } }); });
about 4 years ago · Santiago Trujillo Denunciar

0

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

  • ventana.alerta()
  • ventana.confirmar()
  • ventana.prompt()

los comandos pueden ser ignorados durante este evento.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda