Вот минимальный пример -onbeforeunload, кажется, не всегда trigerred
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, который является просто автономным скриптом, который создает файл с номером счета как его имя.
Иногда это работает, иногда это не так. Я имею в виду, что начальный файл всегда создается. Но иногда файл, который должен быть создан при закрытии, не создается. Любая идея, где возникла проблема?
Возможно, это связано с тем, что вы связываете событие onbeforeunload внутри функции DOMReady. Если процесс размещения содержимого занимает некоторое время, DOM может не быть готов, когда пользователь выгружает страницу. – BenM
@BenM К сожалению нет, я пробовал с пустой страницей и ожидал некоторое время перед закрытием. И файл по-прежнему иногда не создается на сервере. – user544262772
Можете ли вы объяснить суть этого? Вы просто создаете пустой файл на сервере с именем '$ _POST [id] [unloaded]'? Почему бы просто не использовать cookie или сеанс? – BenM