Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/64: Рейтинг темы: голосов - 64, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 23

Отработать аякс при закрытии окна/вкладки

08.01.2015, 22:59. Показов 12649. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Обрыл(обгуглил, обяндексил, скурил) много мануалов, но не нашел....
Поэтому хелп.
При закрытии окна браузера/вкладки нужно отработать скрипт на php через аякс...
php скрипт есть, аякс запрос есть, только не отрабатывают они по событиям onbeforunload, onunload.. etc...

JavaScript
1
2
3
4
5
6
7
8
9
10
11
window.onbeforeunload = function () {
     alert('!!!');
    $.ajax({
        type: "POST",
        url: "unlogin_chat.php",
        data: "nick="+$('#lbl').val(),
        success: function(response){
            alert ('Спасибо за внимание. Пользователь '+response+' успешно вышел из чата');
        }
    });
}
не могу понять где грабли... специально алерт поставил, чтоб видеть, что событие отрабатывается, но.... ёк...
зыЖ onbeforeuload менял на другие доступные методы, ан нет... не выходит каменная чаша у данилы мастера(с)...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.01.2015, 22:59
Ответы с готовыми решениями:

Функция JS при закрытии вкладки сайта
Доброго времени суток форумчане! Нужна подсказка знающего Есть скрипт который срабатывает при закрытии сайта ...

Хочу что бы при закрытии вкладки в браузере выводился alert()
Хочу что бы при закрытии вкладки в браузере выводился alert("Событие закрытия вкладки!"); Этот код почему-то не работает в...

Нужно запустить функцию при закрытии окна, а также при изменении адреса страницы
Нужно запустить функцию при закрытии окна, а также при изменении адреса страницы(но не при обновлении). Как это осуществить? (OnUnload не...

10
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
09.01.2015, 02:29
давно следует купить губозакатывающую машинку
0
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 23
09.01.2015, 21:48  [ТС]
Дайте наводку на способ отследить, что пользователь закрыл окно веб приложения, плз...
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
09.01.2015, 23:34
Цитата Сообщение от noisemax Посмотреть сообщение
Дайте наводку на способ отследить, что пользователь закрыл окно веб приложения, плз...
вы совсем бестолковый?

написано же - отследить закрытие окна можно, событие onbeforeunload для этого имеется, но сделать что-то своё по этому событию НИЗЗЯ!!!

КАК ЕЩЁ ОБЪЯСНИТЬ?
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
10.01.2015, 00:36
noisemax, kalabuni, делаем тест. У меня получилось, но для большей уверенности пусть еще кто-то проверит.

В файле index.html
JavaScript
1
2
3
4
5
6
7
8
9
10
window.addEventListener('beforeunload', function (e) {
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'handler.php', true);
    xhr.send(null);
 
    e.preventDefault();
    var confirmationMessage = "";
    (e || window.event).returnValue = confirmationMessage;
    return confirmationMessage;
}, false);
В файле handler.php только
PHP
1
2
<?php
file_put_contents('test.txt', 'All right!');
Открыли, закрыли, проверяем - появился ли файл test.txt и есть ли в нём запись. У меня и на локальном, и на хосте всё нормально отработало.
1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
10.01.2015, 01:19
открыл, закрыл == ноль
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
10.01.2015, 15:49
Цитата Сообщение от kalabuni Посмотреть сообщение
открыл, закрыл == ноль
Вопрос зацепил. Сейчас проверил на компьютере ребёнка. Там уж точно никаких особых настроек ни в браузере, ни в чем-то другом нет. На домен, котором тестирую, я тоже ни разу не заходил с его компа и всё нормально прокатило.
В каком браузере вы тестировали, версия? Я проверял в FF, Opera, IE11, Safari, Chrome, все (ну, кроме Safari) с последними обновлениями. Может в этом причина? Я сам, в общем-то, считал, что для onbeforeunload прикрыли выполнение скриптов, но ...

Добавлено через 14 часов 3 минуты
noisemax, проверил с несколькими людьми и могу утверждать на 99%, что по событию onbeforeunload можно выполнить ajax-запрос. Почему только на 99%? Потому, что всё-таки у одного человека (kalabuni) не сработало. В чем причина - я не знаю. Может версия браузера, может какие-то кастомные настройки или еще что-то, но в браузерах последних версий и с установками по умолчанию - всё работает без сбоев. Проверяли 14 человек, на разных компьютерах, в разных браузерах: FireFox 34.0.5, FireFox ESR 31.3.0, Opera 26.0.1656.60, Chrome 39.0.2171.95 m, Safari 5.1.7 (7534.57.2), IE 11.0.9600.17207 (эмуляцию не берем в расчет)
Для большей уверенности, запрос делаем синхронный, т.е.:
JavaScript
1
2
3
4
5
6
7
8
// pure JS
xhr.open('POST', 'handler.php', false);
// jQuery 
$.ajax({
   /* ... */
   async: false,
  // success: func // не требуется, по понятным причинам
});
Ваш код, можно переписать так:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
window.addEventListener('beforeunload', function (e) {
 
    $.ajax({
        type: "POST",
        url: "unlogin_chat.php",
        async: false,
        data: {
            nick: $('#lbl').val()
        }
    });
 
    e.preventDefault();
    var cm = '';
    (e || window.event).returnValue = cm;
    return cm;
}, false);
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
10.01.2015, 16:26
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Потому, что всё-таки у одного человека (kalabuni) не сработало. В чем причина - я не знаю.
а я теперь знаю

вопрос был в использовании AJAX, что означает асинхронное использование объекта XMLHTTPRequest
AJAX -- Asynchronous Javascript and XML — «асинхронный JavaScript и XML» (c) https://ru.wikipedia.org/wiki/AJAX
вы использовали в коде собачий язык JQuery, которым я никогда не пользуюсь

а он действительно - собачий! (никак не человеческий)
судите сами: имеется JQuery-метод под названием ajax (т.е. асинхронный), но в этом асинхронном (sic!) по названию методе можно отменить его асинхроннность инструкцией async: false, что вы в своём коде и сделали


я ваш код переписал на pureJS, где метод "автоматом" сделал асинхронным (как того и требовалось топикстартеру) -- xmlhttp.open ('POST', 'unlogin_chat.php', true);
поэтому у меня и не сработало, ибо у меня было асинхронное использование объекта XMLHTTPRequest, а у вас - синхронное

PS. но то, что всё же возможна какая-то программная обработка закрытия страницы - это для меня тоже новость... значит, вполне можно закрывать сессию по закрытию страницы, например
0
 Аватар для vovandr
636 / 523 / 195
Регистрация: 19.08.2013
Сообщений: 1,400
10.01.2015, 16:51
Все это очень странно))) примерно полгода назад у меня это не работало))) хотите верьте хотите нет) браузер хром
0
12 / 12 / 12
Регистрация: 01.07.2014
Сообщений: 106
10.01.2015, 17:21
Цитата Сообщение от vovandr Посмотреть сообщение
Все это очень странно))) примерно полгода назад у меня это не работало))) хотите верьте хотите нет) браузер хром
Буквально на днях тоже проверял подобное (необходимо было сохранить некоторые значения при закрытии страницы) - все работает. Ведь делали (и делают) же как то не закрывающиеся странички (ваш браузер устарел - если вы покинете страницу, то ваш компьютер будет под угрозой. итд.).
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
10.01.2015, 17:42
Цитата Сообщение от kalabuni Посмотреть сообщение
вы использовали в коде собачий язык JQuery
Вообще-то, я показывал на чистом JS
Цитата Сообщение от kalabuni Посмотреть сообщение
согласитесь, что JQuery делает пользователя абсолютно тупым
Я соглашусь в том, что начинающему программисту или программисту на стадии обучения, использование любых фреймворков или библиотек в любом ЯП - противопоказано. Да и вообще, всё, что облегчает работу, но лишает стимула изучать языки программирования досконально - это враг.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2015, 17:42
Помогаю со студенческими работами здесь

Какое событие происходит при закрытии окна выбора файла?
Может кто-то знает, какое событие происходит при закрытии окна выбора файла? onChange точно не подходит, оно возникает при изменении value...

Как при закрытии одного окна IE обновить другое, открытое в данный момент?
Как при закрытии одного окна IE обновить другое, открытое в данный момент? Заранее благодарен :)

URL активной вкладки добавить к заголовку окна.
Приветствую. Наткнулся на информацию по созданию расширения для хрома. Мне нужно что бы урл активной вкладки добавлялся к заголовку окна....

Как вывести диалог при закрытии вкладки
Доброго времени суток! Поставлена такая задача: Если Пользователь закрывает окно/вкладку браузера или переходит на другую...

Как сделать обновление страницы при закрытии всплывающего окна
Добрый день! Выполняю тренировочное задание и застряла. Есть рандомный вывод текста во всплывающем окне, которое появляется после ввода...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru