我正在尝试这样做:
$(window).unload( function () {
$.ajax({
type: "POST",
url: "http://localhost:8888/test.php?",
data: "test",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
alert (c);
});
但是,从未显示成功警报,此请求似乎也没有显示在服务器上。我做错了什么?
答案 0 :(得分:76)
我认为您需要使用async : false
参数使请求同步(默认为异步)。
同步请求会锁定浏览器,直到完成为止。如果请求是异步的,则页面将继续卸载。它的速度非常快,以至于请求永远都没有时间启动。
答案 1 :(得分:20)
尝试使用async = false;
进行调用jQuery.ajax({url:"http://localhost:8888/test.php?", async:false})
我刚尝试过。
答案 2 :(得分:11)
最佳解决方案是使用navigator.sendBeacon。它是全新的功能,开始在新版本的浏览器中实现。该功能适用于比Chrome 39和Firefox 31更新的浏览器。在撰写本文时,Internet Explorer和Safari不支持此功能。要确保您的请求在不支持新功能的浏览器中发送,您可以使用此解决方案:
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);
};
此功能不允许您注册onsuccess回调。
答案 3 :(得分:3)
HTML 5规范声明在alert()
事件期间prompt()
,window.unload()
等将无法使用。有关详细信息,请参阅window.unload()。您可以使用console.log('success');
代替alert()
来检查结果。
答案 4 :(得分:1)
也许您使用onbeforeunload
事件取得更多成功?
$(window).bind('beforeunload', ...
答案 5 :(得分:0)
你的函数和Ajax调用看起来很好,所以我的猜测是你的浏览器窗口关闭,然后ajax调用有时间去服务器并返回。 当窗口关闭时,ajax调用可能会返回一些内容,尝试向您的ajax调用添加错误函数,看看是否是这种情况:
error: function (xhr, textStatus) {
alert('Server error: '+ textStatus);
}