lvi*_*vil 2 javascript ajax jquery onbeforeunload javascript-events
我想在用户离开页面或关闭窗口时发送ajax请求.
这是我的代码:
<script type="text/javascript">
function sendajax(){
$.ajax({
url: "someurl",
data: mydata,
async : false
});
}
</script>
<script type="text/javascript">
window.onbeforeunload=function(){sendajax();};
</script>
Run Code Online (Sandbox Code Playgroud)
事件发生时,事件将触发两次.
为什么会发生?
我知道我可以通过添加变量来阻止它,var ajaxSent=true;但可能有更清洁的方法吗?
UPD:
我用其他一些代码(不发送ajax)替换了sendajax函数内容,发现ajax不是导致问题的那个.它仍然进入该功能两次.
根据您的编辑和评论中的代码,看起来它可能只是由您点击的断开的链接离开页面引起的.
给出以下代码:
<script>
function doSomething() { console.log('onbeforeunload fired'); }
window.onbeforeunload = doSomething;
</script>
<a href="garbage">link A</a>
<a href="http://google.com">link B</a>
Run Code Online (Sandbox Code Playgroud)
如果我点击链接A,我会得到两个控制台日志条目,如果我点击链接BI只获得一个.
看起来它可能是浏览器如何处理其内部"未找到此网页"页面的怪癖,导致您的页面在显示消息之前被刷新并再次关闭,从而使您出现两次onbeforeunload事件.