Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Выполнение функции при закрытии окна браузера

#javascript #ajax #браузер


Пытаюсь сделать счётчик посетителей сайта, я видел его на множестве ресурсов, но
что-то не задалось. 

Есть база, в которой хранится число посетителей, есть php-скрипт, который должен
добавлять в базу +1 при входе юзера (это работает с событием ready) и -1 при его выходе
с сайта (с этим проблема). Есть функция, которая отправляет ajax-запрос на этот php-скрипт,
и есть событие onbeforeunload или unload, вызывающее функцию.

Не знаю, кто из этого списка виновный, но функция умудряется срабатывать аж после
закрытия страницы, при её следующей загрузке. То есть функция срабатывает только при
обновлении страницы или её восстановлении (cntrl+shift+T) даже раньше события ready,
но если страницу просто закрыть, то вообще никакого эффекта не будет. Тестировал только
в firefox, т.к. этот браузер приоритетен. 

Сам код:

HTML:




JS:

function putout() {
    $.ajax({
        type: "POST",
        url: "./php/process.php",
        data: {
            'function': 'putout',
            'def': def,
        },
        dataType: "json",
        success: function(data) {

        },
    });
}


PHP:

include ('./php/connect.php');
mysql_query("UPDATE numb SET numb=numb-1");


Ещё я наслышан о том, что опера и вовсе игнорирует эти события, тогда как вообще
кроссбраузерно реализовать счётчик посетителей сайта?

P.S. Текст уже тыщу раз переисправляли, это уже совсем не мой стиль изложения, примите
к сведению. Вообще ненавижу возможность лезть без спроса в мои публикации сторонним
людям, это ОЧЕНЬ раздражает.
    


Ответы

Ответ 1



Метод выполняется при загрузке страницы, но не срабатывает при выгрузке из-за некорректного использования. Этот код window.onbeforeunload = putout(); выполнит функцию сразу после загрузки скрипта, еще до готовности страницы. В то же время, к событию не присоединится никакой хэндлер, так как функция вернёт undefined. Чтобы указать хэндлер для события, надо убрать вызов метода: window.onbeforeunload = putout; Теперь функция не будет вызываться при старте, а будет вызываться перед выгрузкой. В любом случае, это некорректный подход к подсчету пользователей.

Комментариев нет:

Отправить комментарий