Solicitud de Ajax con JQuery en la descarga de la página

Estoy tratando de hacer esto:

$(window).unload( function () { $.ajax({ type: "POST", url: "http://localhost:8888/test.php?", data: "test", success: function(msg){ alert( "Data Saved: " + msg ); } }); alert (c); }); 

Sin embargo, la alerta de éxito nunca se muestra, ni esta solicitud parece estar llegando al servidor. ¿Qué estoy haciendo mal?

Creo que necesita hacer la solicitud sincrónica en su lugar (es asíncrona por defecto) utilizando el parámetro async : false .

Intenta llamarlo con async = false;

 jQuery.ajax({url:"http://localhost:8888/test.php?", async:false}) 

Lo intenté.

La mejor solución es usar navigator.sendBeacon . Es una funcionalidad completamente nueva que se está empezando a implementar en las nuevas versiones de navegadores. La función está disponible en navegadores más nuevos que Chrome 39 y Firefox 31. No es compatible con Internet Explorer y Safari en el momento de la escritura. Para asegurarse de que su solicitud se envíe en los navegadores que aún no admiten la nueva funcionalidad, puede usar esta solución:

 var navigator.sendBeacon = navigator.sendBeacon || function (url, data) { var client = new XMLHttpRequest(); client.open("POST", url, false); // third parameter indicates sync xhr client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); client.send(data); }; 

Sin embargo, esta función no le permite registrar una callback onsuccess.

La especificación de HTML 5 indica que alert() , prompt() , etc. no estarán disponibles durante el evento window.unload() . Por favor, consulte window.unload () para más detalles. Puede verificar el resultado utilizando console.log('success'); en lugar de alert() .

Su función y la llamada Ajax se ven bien, así que supongo que la ventana de su navegador está cerrada antes de que la llamada ajax tenga tiempo de ir al servidor y volver. La llamada ajax puede devolver algo cuando la ventana se está cerrando, intente agregar la función de error a su llamada ajax para ver si ese es el caso:

 error: function (xhr, textStatus) { alert('Server error: '+ textStatus); } 

¿Tal vez tendrías más éxito usando el evento onbeforeunload lugar?

  $(window).bind('beforeunload', ...