'onbeforeunload'两次射击

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不是导致问题的那个.它仍然进入该功能两次.

bee*_*bug 5

根据您的编辑和评论中的代码,看起来它可能只是由您点击的断开的链接离开页面引起的.

给出以下代码:

<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事件.