最近在做项目的时候,有这样一个功能,当用户在填写表单之后,或是填写了部分表单,但并没有点击提交,而且是离开了页面,这时需要前端做一个事,就是发个请求到后端保存用户填写的表单数据。
一、在做这件事件之前 需要弄清楚beforeunload和unload的区别
1.onunload事件是已经从服务器读取到了数据,在替换到当前页面之前执行的。
2.onbeforeunload事件是正要去服务器读取数据还没有读取到页面数据时执行的,因此onbeforeunload事件优先于onunload事件执行,可以阻止onunload事件的执行。
onunload事件在窗口打开、刷新、关闭时都会执行。
onbeforeunload事件在新窗口被打开的时候并不会执行,只在刷新和关闭时执行。
window.addEventListener('beforeunload', function() {
// dosomething
});
二、还有另外一个就是需要在页面关闭之前去发完这个请求,
这个请求必须是同步的请求
原因:我个人理解的是如果是同步的请求,浏览器会等待请求发送出去后再响应unload
如果是异步请求的话可能会导致数据丢失
三、最后总结踩坑
window.addEventListener(‘beforeunload’, function() {
// dosomething
});
在这个事件里,chrom下 不能用alert直接去验证,页面关闭前该事件有没有执行,
可以直接用return, 最好的调试方法是debugger,抓包也可以。