none
como saber que el navegador se cerro RRS feed

  • Pregunta

  • bueno la duda que tengo es como saber cuando el navegador se esta cerrando

     

    el caso es que estoy haciendo un sistema que me soliciten productos online pero el caso es por ejemplo un empleado esta haciendo uso del sistema haciendo el pedido de un cliente pero justo en ese momento se va la luz y no tiene ups solo estaba haciendo ordenes de compra pero no las concluyo osea la base de datos ya tenia descontados algo del stock del ese producto pero se va la luz y se pierde la data para culminar la compra

     

    osea quiero implementar cuando el navegador se cierra todos los datos solicitados de la base de datos que se descontaron vuelvan como un lanzador que vuelva hacer un insert de todos los datos para recuperar los productos antes extraidos de la misma DB

     

    me pueden recomendar que hacer ante esta situacion o algun enlace para investigar

     

    gracias

     

     


    1
    miércoles, 20 de abril de 2011 14:58

Respuestas

  • Buenas!

    Eeehhhmmm... En principio que el navegador se cierra, puedes detectarlo a través de un evento que lanza el objeto global window. Si usas jQuery, es muy fácil:

    $(window).unload(function() {
     alert('Se cierra la ventana');
    });
    
    

    Pero ojo que este evento se dispara en distintos casos según distintos browsers (a veces precisamente no se dispara al cerrar el navegador, pero sí al hacer F5, o bien al seguir un enlace, o bien al cerrar una pestaña...). Yo personalmente evitaría el uso de ese evento. Más info en: http://api.jquery.com/unload/

    Ahora bien, no va a funcionar cuando se va la luz. Cuando se va la luz no hay nada que hacer ¿Entonces?

    Debes diseñar tu sistema para que sea robusto a esos fallos. En tu caso deberías:

    1. Deberías añadir las ordenes de compra en un estado de "reserva" y bloquear el stock correspondiente
    2. Cuando el usuario confirme al final, pones todas las órdenes en estado de reserva a enviadas y descontas todo el stock bloqueado.

    Si pasado un tiempo x, las órdenes de compra reservadas no se han confirmado, las eliminas y desbloqueas el stock. Eso significará que el usuario se "ha ido" (ya sea porque ha cerrado el navegador o bien se ha ido la luz en casa del usuario).

    Un saludo!

     


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    • Marcado como respuesta Eder Costa jueves, 18 de octubre de 2012 14:18
    miércoles, 20 de abril de 2011 15:20

Todas las respuestas

  • Buenas!

    Eeehhhmmm... En principio que el navegador se cierra, puedes detectarlo a través de un evento que lanza el objeto global window. Si usas jQuery, es muy fácil:

    $(window).unload(function() {
     alert('Se cierra la ventana');
    });
    
    

    Pero ojo que este evento se dispara en distintos casos según distintos browsers (a veces precisamente no se dispara al cerrar el navegador, pero sí al hacer F5, o bien al seguir un enlace, o bien al cerrar una pestaña...). Yo personalmente evitaría el uso de ese evento. Más info en: http://api.jquery.com/unload/

    Ahora bien, no va a funcionar cuando se va la luz. Cuando se va la luz no hay nada que hacer ¿Entonces?

    Debes diseñar tu sistema para que sea robusto a esos fallos. En tu caso deberías:

    1. Deberías añadir las ordenes de compra en un estado de "reserva" y bloquear el stock correspondiente
    2. Cuando el usuario confirme al final, pones todas las órdenes en estado de reserva a enviadas y descontas todo el stock bloqueado.

    Si pasado un tiempo x, las órdenes de compra reservadas no se han confirmado, las eliminas y desbloqueas el stock. Eso significará que el usuario se "ha ido" (ya sea porque ha cerrado el navegador o bien se ha ido la luz en casa del usuario).

    Un saludo!

     


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    • Marcado como respuesta Eder Costa jueves, 18 de octubre de 2012 14:18
    miércoles, 20 de abril de 2011 15:20
  • utiliza transacciones... asi nadmas le haces rollback :D
    jueves, 8 de diciembre de 2011 19:47
  • Lo que haces no es muy correcto, ¿por que no mantienes un registro de lo que hay en la orden pero sin tocar tu base de datos?, algo asi komo una tabla temporal, o prueba con transacciones asi no guardas cambio hasta que no se haga la orden formal desde el cliente
    jueves, 22 de diciembre de 2011 16:54