php - onbeforeunload 似乎并不总是被触发

标签 php javascript jquery html onbeforeunload

这是一个最小的例子 -

index.php

<?php
$count = file_get_contents("count.txt") + 0;
file_put_contents("$count.txt [loaded]", '');
file_put_contents("count.txt", $count + 1);
?>

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <script src="jquery-1.10.2.min.js"></script>
</head>
<body>
<main>
    <p> hi there </p>
</main>

<script type="text/javascript">
var id = "<?php echo $count; ?>";
</script>

<script src="script.js"></script>
</body>
</html>
<小时/>

script.js

$(document).ready(function () 
{
$(window).bind('beforeunload', function () {
    $.post("unloader.php", { id : id });
});

});
<小时/>

unloader.php

<?php
file_put_contents("$_POST[id] [unloaded]", '');

当我打开网页时,会创建一个以计数作为名称的文件。 当我关闭选项卡时,jquery 请求 unloader.php,这只是一个独立的脚本,它创建一个以计数作为名称的文件。

有时有效,有时无效。 我的意思是始终创建打开文件。但有时关闭时必须创建的文件并未创建。 知道问题发生在哪里吗?

最佳答案

卸载页面时您无法(可靠地)进行 AJAX 调用。因为正在卸载,所以仍在进行中的所有内容都将被删除。

如果浏览器的 AJAX 调用速度足够快(或者服务器响应新页面加载的速度足够慢),那么您应该会看到结果,但它一点也不可靠。

关于php - onbeforeunload 似乎并不总是被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18288831/

相关文章:

javascript - DOM 中 IE 的 document.all 是什么?

javascript - 如何在AngularJS中获取按钮标签?

javascript - 单击时将类添加到具有特定类的所有元素

php - fatal error 异常类 'contact' 未找到 laravel 5

javascript - Angular Material 滑动切换的两种方式绑定(bind)无法按预期工作( Angular 4)

javascript - 谷歌可视化数据表仪表板中的总和列

javascript - 验证不同组中同名复选框是否被选中

php - 预序遍历父子动态插入不起作用

php - 使用 PHP 将选项卡式文本转换为树(SQL 将每一行插入 TreeNode 表(TreeNodeID、ParentID、Title))

php - 如何在 table 内制作菱形图案/形状(星号)? (html + php)