window.onbeforeunload выполнение запроса
-
26-09-2019 - |
Вопрос
Я пытаюсь выполнить почтовый запрос, когда пользователь покинет страницу. Код, с которым я работаю
<script type="text/javascript">
window.onbeforeunload = function(){
var used = $('#identifier').val();
$.post('conversation.php?leave=true',{ud:used});
}
</script>
Есть ли что-то не так с тем, что я здесь делаю? Результатом, который я получаю в консоли ошибки FF, просто говорит, что другие не связанные функции / переменные не определены (поскольку они разгрузки). Любые советы или указатели для того, что мне нужно исправить?
Решение
Простой ответ - вы не можете сделать асинхронный звонок Ajax в beforeunload
событие надежно, это будет очень Вероятно, будет прекращено до того, как он закончится, поскольку мусор в браузере собирает страницу. Ты могу Сделайте синхронный звонок, как это:
$.ajax({
type: "POST",
url: 'conversation.php?leave=true',
data:{ud:used},
async: false
});
Пожалуйста нет Сделайте это, хотя, поскольку он ловушает ваш пользователь на странице дольше, чем необходимо, и предотвращает их уход, что приведет к негативному опыту. Обратите внимание, что это также блокирует браузер пока он выполняет, async: false
следует избегать в каждом случае возможным.