Php onbeforeunload不';Don’我似乎不总是被激怒
这里有一个最小的例子- index.phpPhp onbeforeunload不';Don’我似乎不总是被激怒,php,javascript,jquery,html,onbeforeunload,Php,Javascript,Jquery,Html,Onbeforeunload,这里有一个最小的例子- index.php unloader.php 卸载页面时,无法(可靠地)进行AJAX调用。因为它正在卸载,所以仍在进行中的任何内容都将被删除 如果浏览器的AJAX调用速度足够快(或者服务器对新页面加载的响应速度足够慢),那么您应该会看到结果,但它根本不可靠。这可能是因为您正在将onbeforeunload事件绑定到DOMReady函数内部。如果放置内容的过程需要一段时间,则当用户卸载页面时,DOM可能没有准备好。@BenM遗憾的是,我尝试了一个空白页面,并在关闭之前等待
unloader.php
卸载页面时,无法(可靠地)进行AJAX调用。因为它正在卸载,所以仍在进行中的任何内容都将被删除
如果浏览器的AJAX调用速度足够快(或者服务器对新页面加载的响应速度足够慢),那么您应该会看到结果,但它根本不可靠。这可能是因为您正在将onbeforeunload
事件绑定到DOMReady函数内部。如果放置内容的过程需要一段时间,则当用户卸载页面时,DOM可能没有准备好。@BenM遗憾的是,我尝试了一个空白页面,并在关闭之前等待了一段时间。而且文件有时仍然无法在服务器上创建。你能解释一下这一点吗?您只需在服务器上创建一个名为$\u POST[id][unload]
的空白文件即可?为什么不使用cookie或会话?@BenM这样我就可以检查个人访问者在页面上停留的时间,比较加载和卸载的时间增益,为什么使用文件系统来完成DB的工作?或者更好的是,使用谷歌分析!感谢您的回答,我想我将使用一个主循环,它每秒发送一个请求更新一个远程文件,这样我就几乎不知道用户在页面上停留了多长时间。听起来很混乱,但这样就可以了。每秒钟???祝你好运就我个人而言,我只是在数据库中保留一个字段,根据用户上次加载页面的时间进行更新,并假设他们在接下来的15分钟内在线。如果您需要持续ping,30秒到1分钟是一个很好的起点。
<?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>
$(document).ready(function ()
{
$(window).bind('beforeunload', function () {
$.post("unloader.php", { id : id });
});
});
<?php
file_put_contents("$_POST[id] [unloaded]", '');