¿Cómo realizar una llamada ajax en la descarga de la página?

Tengo un tablero donde los usuarios pueden alternar algunos valores de input para configurar el aspecto de la página.

Quiero almacenar esos cambios en una tabla de database, de modo que cuando el usuario regrese, el panel aparece según la configuration de usuario específica recuperada de la database.

Sé cómo enviar esos valores a DB y cómo recuperarlos

No quiero hacer llamadas ajax cada vez que el usuario cambie una configuration.

En cambio, creo que este senario sería mejor:

  1. Carga de página (recuperar configuration de DB si existe)
  2. El usuario alterna los elementos de configuration ui (por ejemplo, casillas de verificación, seleccionar etc.) y se producen los cambios apropiados en el lado del cliente (algunos divs se ocultan, otros se muestran, etc. y los valores de input de configuration se almacenan en un campo oculto), pero no se requiere una llamada ajax. lugar
  3. Cuando el usuario hace clic en un enlace a otra página, los valores de input de configuration (que se han almacenado en el campo oculto) se envían a la database mediante una llamada ajax.

MI PREGUNTA

Una solución (?) Sería el uso del evento onbeforeunload como este:

 window.onbeforeunload = function(e) { // Perform the ajax call return 'Do you want to save the configuration changes?'; }; 

Pero, si el browser del usuario previene las windows emergentes, ¿la function no se ejecutará?

¿Hay alguna forma de realizar una llamada ajax en onbeforeunload evento onbeforeunload de la onbeforeunload , sin llamar a un cuadro de dialog?

2 Solutions collect form web for “¿Cómo realizar una llamada ajax en la descarga de la página?”

No. Durante la descarga, el browser matará todas las requestes pendientes. Entonces el AJAX podría o no llegar al server. Tampoco puede hacerlo dentro del controller del evento beforeunload porque la primera A en AJAX significa: Asincrónico -> Simplemente ponga la request en la stack y eventualmente la ejecute. Por lo tanto, la request se examinará solo después de que el controller regrese. Pero muy pronto después de eso, el browser matará todo lo relacionado con la página.

La solución es enviar siempre actualizaciones al server mientras los usuarios realizan cambios. Ponlos en una table especial "temporal" desde la que puedes restaurar el estado más tarde.

También podría usar algo como localStorage en el browser pero luego, los datos no se moverían con el usuario. Por ejemplo, si trabajaban en una tableta y se rompían o tenían una pérdida de potencia, podían moverse a su PC para continuar donde lo habían dejado.

No puede garantizar que una llamada Ajax se complete de esta manera, vea la respuesta de Aaron. Mi sugerencia sería usar algo como localStorage para leer / escribir la configuration del usuario en su lugar.

Si necesita que la apariencia de un usuario persista en varios dispositivos, agregue una request periódica para leer / escribir las actualizaciones recientes de localStorage en la database central.

  • ¿Cómo puedo verificar si una barra de desplazamiento está visible?
  • jQuery: ¿Cómo elimino una propiedad border del css de mi div?
  • Jquery Ajax beforeSend y success, error & complete
  • Evitar que el button de espacio active cualquier otro button, click jQuery
  • El cursor wysihtml5 salta al lugar incorrecto en la nueva línea
  • ¿Cómo puedo encontrar fácilmente la distancia entre un punto en la página y la parte inferior de la window del browser usando JavaScript?
  • ¿Cómo verificar si un valor pasado a una function de javascript es nulo?
  • Simular cookies de session en sesiones mobilees?
  • Cómo poner datos JSON en la tabla de cuadrícula html / javascript
  • Detener la ejecución del script de JavaScript
  • Cómo hacer zoom en el diagtwig jsPlumb
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.