我的代码是这样的:
window.onbeforeunload = function() {
$.post('ajax_url',$('form').serialize());
return "are you sure";
}
现在,如果窗口关闭,我想发送一个ajax请求,但当他通过单击取消按钮停留在页面上时,我不想发送。
将 ajax 移动到卸载事件处理程序
window.onunload = function() {
$.post('ajax_url',$('form').serialize());
}
答案取自这篇文章。
在您的情况下,您可以执行以下操作:
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,该设置在大约一秒内触发。
如果用户确认为 ok,则用户将重定向,并且永远不会触发第二个 setTimeout。