2011-07-25 29 views
7

Quiero hacer una llamada AJAX antes de que el usuario abandone la página (básicamente antes de abandonar la página y antes de actualizar la página)?Cómo saber cuando un usuario ha salido de la página y actualizado la página

Cómo se puede hacer esto. Intenté buscar algo con jQuery pero no obtuve nada.

He intentado utilizar el siguiente código -

window.onbeforeunload(function(){alert('before unload');}); 

Pero el cuadro de alerta nunca aparece al salir de la página (cerrar la pestaña del navegador) o actualizar la página.

¿Cómo se puede lograr esto?

+1

onBeforeUnload, que yo sepa, fue un evento de IE. otros navegadores pueden haberlo implementado, pero nada definitivo. Tal vez explicar el propósito y podemos llegar a una solución alternativa? Atrapar a un usuario que se va es bastante difícil ... –

+0

PD, [MDN antes de la descarga] (https://developer.mozilla.org/en/DOM/window.onbeforeunload). Asimismo, [MSDN docs] (http://msdn.microsoft.com/en-us/library/ms536907%28VS.85%29.aspx) en él. –

+0

Brad: estoy haciendo un seguimiento relacionado con los videos de YouTube, como la duración real que un usuario ha visto el video. Para esto, estoy usando una frecuencia de muestreo (como 5 segundos) y actualizando una variable JS global que debe enviarse al servidor cuando finaliza el video. Además, el usuario puede salir/volver a cargar la página después de ver una parte de ella (antes de llegar al final del video). Entonces, necesito saber cuándo el usuario deja/recarga la página para poder hacer la llamada AJAX al servidor. Además, quería preguntar si esta es la forma recomendada de hacer esto? – Siddharth

Respuesta

5
$(window).unload(function() { 
    alert('Visitor left page'); 
}); 

En cuanto a la llamada AJAX, puede hacerlo, pero debe establecer el async-false.

$.ajax({ 
    async: false, 
    ... 
}); 
+0

Vale la pena señalar que esto no funciona en algunos dispositivos, como el iPad – Blowsie

7

Usted debe tratar unload() de jQuery:

$(window).unload(function(){ 
    //Do your call 
    alert('before unload'); 
    }); 

oro se podría utilizar el evento beforeunload. Debes probarlo bien porque el navegador tiende a imponer esas cosas de manera diferente. tomado de la documentación de jquery:

El manejo exacto del evento de descarga ha variado desde la versión a la versión de los navegadores. Por ejemplo, algunas versiones de Firefox activan el evento cuando se sigue un enlace, pero no cuando la ventana está cerrada. En el uso práctico de , el comportamiento debe probarse en todos los navegadores admitidos, y en contraste con el evento previo de propiedad exclusiva.

+0

¡+1 me ganó 6 segundos! – Shef

+0

Gracias! Esta solución funciona para mí. Veo el cuadro de alerta cuando actualizo la página y cuando cierro la ventana/pestaña del navegador. Solo necesito pedirle que haga una llamada ajax allí, ¿puedo estar seguro de que mi servidor recibirá la llamada? No tengo que preocuparme por la respuesta. – Siddharth

+1

Bueno, si coloca la llamada antes de la casilla de alerta, estará bastante seguro de que la llamada llega a su servidor. –

2

Su código es simplemente incorrecto. La descarga anterior se usa para preguntarle a la persona si realmente quiere abandonar la página. Necesita descargar.

window.onunload = function() { 
    // Make your AJAX call 

} 

método mejor uso jQuery.unload()

+0

Lo hizo con JQuery. Por favor, ayúdenme con el comentario que publiqué en la respuesta anterior. – Siddharth

+0

Nicola tiene razón, allá arriba. – Claudio

Cuestiones relacionadas