У меня вот такая вот проблема. Разрабатываю сайт и пользуюсь библиотекой Subsys_JsHttpRequest_Js для динамической подгрузки данных. У меня есть задача, при закрытии окна, мне нужно записать кое-какие данные в базу данных. Но в body прописую событие onUnload и назначаю функцию которая через библиотеку Subsys_JsHttpRequest_Js обращается к базе данных и должна по идеи записать туда данные. Но когда пытаюсь, туда что-то записать именно в событии onUnload ничего не работает, то есть в базу данных ничего не записывается. А вот когда я ту же самую функцию назначаю на событие onLoad тогда код срабатывает. Кто работал с этой библиотекой и знает, в чем тут дело, пожалуйсто напишите.
Дело не в ней, дела в событии onUnload. В общем, плохо оно работает, и в разных браузерах - по разному. Есть еще одно событие - onBeforeUnload, попробуй его..
Нет на событие onBeforeUnload код тоже не срабатывает. Сама то функция которую на назначил на событие onBeforeUnload срабатывает, хотя она срабатывала и на событие onUnload но видимо не происходит обращение на сервер, потому, что в базу данных ничего не записывается. Вот код: Код (Text): function recordAmount() { alert(amount); //return; var req = new Subsys_JsHttpRequest_Js(); var men_id = 1212; var woman_id = 1414; req.onreadystatechange = function() { alert(req.responseText); //return true; } req.caching = false; req.open('POST', 'validate.php', true); req.send({ action: 'recordAmount', men: men_id, woman: woman_id, amount: amount }); }
Ну дурацкая или не дурацкая это мне решать. Другого выхода я не вижу. Вот например я пишу платный чат, на javascript'е я подсчитываю сколько времени пользователь проговорил, а потом при закрытии мне нужно эту сумму записать в базу данных. Вот как мне это еще сделать. Такой вариан что типа записуй поминутно или что-то подобное не подходит. Заказчик хочет, чтобы сумма разговора записывалась в базу одной записью а не тысячами. Как еще можно по другому эту задачу решить?
Первый абзац не связан со вторым АБСОЛЮТНО. Аксиома 1: HTTP - контекстно-свободный протокол. Это значит он не несет данных о текущем состоянии клиента после получения данных. А если я подменю Яваскрипт? И буду тебе такие данные посылать ответом, что ты мне еще должен будешь 1000 $ ? Аксиома 2: Все критичные вычисления можно делать лишь на стороне сервера. 3: Заказчику должно быть п....й. Ему важен результат, или реализация? И главное - то, что ты не хочешь записать 1000 строк вместо одной еще не говорит о том, что нельзя записать 1000 строк вместо одной.
Тогда никто за Ваш чат платить не будет Это же самая натуральная дыра в ПО. Я просто возьму и вместо того,чтобы закрывать браузер убью его. Все, никаких onunload и т.п. не будет - значит денег я не заплачу. Или я просто отключу яваскрипт перед закрытием страницы - тоже никакого обработчика. Такие "фишки" легко распространяются среди пользователей - стоит хотя бы одному найти такой способ. Им не обязательно понимать технологию процесса,если у них будет рецепт обхода процедуры оплаты. Поэтому вам просто нужно изложить все эти моменты заказчику и писать поминутно (или как у вас в тарифах все это прописано).
ХАХАХАХАХА! Вот это супер! Вот спасибо! Хорошее настроение на весь день! Ты ещё слова отдельно считай, сколько он наговорил! Ой не могу, умора! =))))
Вообщем я попросил, чтобы мне решили помочь эту проблемму, а не обсуждением всего угодно кроме того, что я хотел узнать. Так что пожалуйста если кто знает ответьте
Но ты же попросил, а не потребовал, верно? А мы, вроде бы, пока ещё не твои рабы, чтобы делать только то, о чем ты попросил? Здесь, мне казалось, свободный форум, где люди общаются на самые разные темы. А не служба технической поддержки проектов пользователя pr0n1x
проникс: тебе ж уже ответили на все вопросы, которые ты задал, и которые у тебя еще только будут появляться
Тебе надо решить, ты чего хочешь, денег брать, или время подсчитывать. А далее уже искать оптимальное решение по достижению выбранной цели.
Что значит по какому принципу??????????? Мне нужно подсчитать сколько времени пользователь прообщался, и при закрытии окна мне нужно записать это количество в базу данных, как мне это сделать?
и + у меня еще одна задача есть, когда один пользователь уходит у второго должно закрываться окно чата. А пользователь уходит в том случае когда он закрывает окно. Мне тоже нужно что-то записывать в базу данных, чтобы у второго пользователя я проверял эту запись и потом тоже у него закрывал окно
сделай в базе данных таблицу сессий пользователя. Как только пользователь авторизуется - добавляй запись в эту таблицу, запоминая время начала сессии. Как только к пользователю приходит сообщение или от пользователя уходит сообщение - обновляй запись в таблице сессий - меня на текущее поле окончания сессии. Далее, наверное, понятно.
1. Определяешь единицу времени Х по которой происходит пересчет средств, например 30 секунд. 2. Каждые Х секунд отправляешь на сервер запрос. 3. Запрос не должен передавать ни время не стоимость, лучше пусть он спрашивает можно ли человеку дальше общаться (баланс > 0) 4. Если запрос поступил на сервер, уменьшаешь баланс пользователя на Х*Стоимость, увеличиваешь количество проведенного времени в онлан на Х, возвращаешь 1, если баланс > 0 или 0 если меньше 0 (вообще возвращать что-либо совсем не обязательно). Вообще лучше приурочить обновление времени и бьаланса к обновлению/передачи сообщений, о чем тебе уже намекали. И еще проверка на то может ли пользователь еще отправлять сообщения и получать обязательно должна быть в соответствующих функциях на стороне сервера и только в качестве дополнения в JS.