1) Если вы ищете способ работы во всех браузерах, то самый безопасный способ - отправить синхронный AJAX на сервер. Это не очень хороший метод, но, по крайней мере, убедитесь, что вы не отправляете слишком много данных на сервер, и сервер работает быстро.
2) Вы также можете использовать асинхронный запрос AJAX и использовать функцию ignore_user_abort на сервере (если вы используете PHP). Однако ignore_user_abort сильно зависит от конфигурации сервера. Убедитесь, что вы хорошо его протестировали.
3) Для современных браузеров не следует отправлять запрос AJAX. Вы должны использовать новый метод navigator.sendBeacon , чтобы отправлять данные на сервер асинхронно, без блокировки загрузки следующей страницы. Поскольку вы хотите отправить данные на сервер до того, как пользователь уйдет со страницы, вы можете использовать этот метод в обработчике событий unload .
$(window).on('unload', function() {
var fd = new FormData();
fd.append('ajax_data', 22);
navigator.sendBeacon('ajax.php', fd);
});
Также, кажется, есть полифилл для sendBeacon . Он прибегает к отправке синхронного AJAX, если метод изначально не доступен.
ВАЖНО ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ: Обратите внимание, что unload обработчик событий не гарантированно будет запущен для мобильных телефонов . Но событие visibilitychange гарантированно будет запущено. Так что для мобильных устройств ваш код сбора данных может потребовать небольшой настройки.
Вы можете обратиться к моей статье в блоге для реализации кода всеми тремя способами.