Ich versuche das zu tun:
$(window).unload( function () {
$.ajax({
type: "POST",
url: "http://localhost:8888/test.php?",
data: "test",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
alert (c);
});
Die Erfolgswarnung wird jedoch nie angezeigt, und diese Anforderung scheint auch nicht den Server zu treffen. Was mache ich falsch?
Versuchen Sie es mit async = false aufzurufen.
jQuery.ajax({url:"http://localhost:8888/test.php?", async:false})
Ich habe es gerade versucht.
quelle
Die beste Lösung ist die Verwendung von navigator.sendBeacon . Es ist eine brandneue Funktionalität, die in neuen Versionen von Browsern implementiert wird. Die Funktion ist in Browsern verfügbar, die neuer als Chrome 39 und Firefox 31 sind. Sie wird zum Zeitpunkt des Schreibens von Internet Explorer und Safari nicht unterstützt. Um sicherzustellen, dass Ihre Anfrage in den Browsern gesendet wird, die die neue Funktionalität noch nicht unterstützen, können Sie folgende Lösung verwenden:
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); };
Mit dieser Funktion können Sie jedoch keinen Onsuccess-Rückruf registrieren.
quelle
unload
undbeforeunload
verwendet werden, da es möglicherweise nicht zuverlässig ausgelöst wird. Stattdessen sollte dasvisibilitychange
Ereignis verwendet werden. Weitere Informationen finden Sie in den MDN-Dokumenten.Die HTML - 5 - Spezifikation besagt , dass
alert()
,prompt()
etc. werden nicht während der zur Verfügungwindow.unload()
Veranstaltung. Weitere Informationen finden Sie unter window.unload () . Sie können das Ergebnis überprüfen, indem Sieconsole.log('success');
anstelle von verwendenalert()
.quelle
Vielleicht hätten Sie
onbeforeunload
stattdessen mehr Erfolg mit der Veranstaltung?$(window).bind('beforeunload', ...
quelle
Ihre Funktion und Ihr Ajax-Aufruf sehen gut aus. Ich vermute also, dass Ihr Browserfenster geschlossen ist, bevor der Ajax-Aufruf Zeit hat, zum Server und zurück zu gehen. Der Ajax-Aufruf gibt möglicherweise etwas zurück, wenn das Fenster geschlossen wird. Fügen Sie Ihrem Ajax-Aufruf eine Fehlerfunktion hinzu, um festzustellen, ob dies der Fall ist:
error: function (xhr, textStatus) { alert('Server error: '+ textStatus); }
quelle