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

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

08.01.2015, 22:59. Показов 12703. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru