Este método es bastante confiable, si su servidor es lo suficientemente rápido para responder. Algo para tener realmente cuidado sin embargo. Si cierra el navegador y envía la solicitud de AJAX al evento de descarga, hay muchas posibilidades de que la respuesta no vuelva del servidor a tiempo antes de que se destruya el objeto de la ventana. Lo que sucede en este caso (al menos con IE) es que huérfano su objeto de conexión y no terminarlo correctamente hasta que se llegue al tiempo de espera de la conexión. Si su servidor no tiene activada la conexión keep-alive, después de cerrar 2 ventanas (mientras aún tiene otra ventana abierta), se le acabarán las conexiones abiertas al servidor (para IE6-7, para IE8 - 6 ventanas) y no podrá abrir su sitio web hasta que se agote el tiempo de espera de su conexión.
Me encontré en una situación como esa antes de abrir una ventana emergente que enviaba una solicitud de AJAX en la descarga, era muy confiable, pero estaba plagada por la emisión descrita anteriormente, y tomó mucho tiempo para yo para rastrearlo y entender lo que está pasando. Después de eso, lo que hice, es que me aseguré de que la ventana de apertura tuviera el mismo código para llamar al servidor, y en cada descarga se verificaba el abridor y se ejecutaba el código allí si estaba presente.
Parece que si cierra la última ventana del navegador, IE destruirá la conexión correctamente, pero si hay otra ventana abierta, no lo hará.
P.S. Y solo para comentar la respuesta anterior, AJAX no es realmente asincrónico. Al menos la implementación de JS no lo es. Después de enviar una solicitud, su código JS seguirá esperando la respuesta del servidor. No va a bloquear la ejecución del código, pero dado que el servidor puede tardar un tiempo en responder (o el tiempo suficiente para que Windows rescinda el objeto de la ventana de IE), es probable que se encuentre con el problema descrito anteriormente.
¿Alguien ha intentado esto con async apagado? Supongo que esto evitaría que el navegador se descargue hasta que se devuelva la solicitud. –
Eso es correcto. Con la función de sincronización desactivada, el navegador esperará la respuesta del servidor antes de descargar la página. Esto ayuda con los errores de Chrome, donde Chrome es muy poco confiable cuando se trata de descargar eventos y operaciones de sincronización. Esto también arreglará la conexión IE que acapara lo que describí anteriormente. Pero será visible por el usuario. –
Vale la pena vigilar la nueva API de Beacon con 'Navigator.sendBeacon' que permitirá una mejor manera de emitir de forma confiable una solicitud asíncrona a nuestro servidor en la descarga: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon – Wildhoney