我的代码就像这样
window.onbeforeunload = function() {
$.post('ajax_url',$('form').serialize());
return "are you sure";
}

现在我想在窗口关闭的情况下发送ajax请求,但是当他通过点击取消按钮停留在页面上时不会发送
答案 0 :(得分:1)
将您的ajax移动到卸载事件处理程序
window.onunload = function() {
$.post('ajax_url',$('form').serialize());
}
答案 1 :(得分:0)
在你的情况下,你可能会这样做:
setTimeout(function() {
setTimeout(function() {
$.post('ajax_url',$('form').serialize());
}, 1000);
},1);
return 'are you sure';
第一个setTimeout方法中的代码延迟为1毫秒
这只是将功能添加到UI队列中。 由于setTimeout异步运行 Javascript interpreter will continue by directly calling the return statement
,因此会触发浏览器模式对话框。
这将阻止UI队列,并且不会执行第一个setTimeout中的代码,直到模式关闭。
如果用户按下取消,则会触发另一个在大约一秒钟内触发的setTimeout。
如果用户确认为,则用户将重定向,并且永远不会触发第二个setTimeout。