2010-04-12 16 views
5

He tratado de "descarga" y "beforeunload" vinculante en el seguimiento de código, pero ninguno de que el navegador está enviando una solicitud:Ondemand Javascript llamada en la ventana de descarga usando jQuery

$(window).bind('unload', function(){ 
     $.ajax({cache: false, 
     dataType: "script", 
      url: "test.php" 
     }); 
    }); 

Cualquier sugerencia?

+0

¿En qué navegador está ejecutando esto? Durante mucho tiempo, Safari tuvo problemas para implementar correctamente los controladores de 'descarga'. No estoy seguro si eso sigue siendo cierto. – Syntactic

Respuesta

6

El navegador no espera a que termine este código ... funciona perfectamente :) Agregue un alert('hi') para verlo en ejecución.

El problema que está viendo es típico de los problemas unload, el navegador se aleja mucho antes de que se dispare una solicitud en su caso ... y realmente, ningún código que esté ejecutando debe completarse antes de que yo puedo pasar a la página siguiente Así es como se comporta unload. Puede hacer que la llamada sea sincrónica para mantener al usuario allí, pero por favor no haga esto.

El evento unload se creó en la ventana principalmente para limpiar todo lo que quedaba en el DOM que necesitabas, más así que cuando la recolección de basura no era tan buena como ahora (y aún no está en IE). ..no fue realmente diseñado con AJAX o seguimiento de métricas en mente.

1

Simplemente configure la opción async en falso.

$(window).bind('unload', function(){ 
    $.ajax({ 
    cache: false, 
    async: false, 
    dataType: "script", 
     url: "test.php" 
    }); 
}); 
Cuestiones relacionadas