Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php onbeforeunload不';Don’我似乎不总是被激怒_Php_Javascript_Jquery_Html_Onbeforeunload - Fatal编程技术网

Php onbeforeunload不';Don’我似乎不总是被激怒

Php onbeforeunload不';Don’我似乎不总是被激怒,php,javascript,jquery,html,onbeforeunload,Php,Javascript,Jquery,Html,Onbeforeunload,这里有一个最小的例子- index.php unloader.php 卸载页面时,无法(可靠地)进行AJAX调用。因为它正在卸载,所以仍在进行中的任何内容都将被删除 如果浏览器的AJAX调用速度足够快(或者服务器对新页面加载的响应速度足够慢),那么您应该会看到结果,但它根本不可靠。这可能是因为您正在将onbeforeunload事件绑定到DOMReady函数内部。如果放置内容的过程需要一段时间,则当用户卸载页面时,DOM可能没有准备好。@BenM遗憾的是,我尝试了一个空白页面,并在关闭之前等待

这里有一个最小的例子-

index.php


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]", '');