За последние 24 часа нас посетили 22247 программистов и 1031 робот. Сейчас ищут 585 программистов ...

Вопрос по Subsys_JsHttpRequest_Js()

Тема в разделе "JavaScript и AJAX", создана пользователем pr0n1x, 30 окт 2006.

  1. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    У меня вот такая вот проблема.
    Разрабатываю сайт и пользуюсь библиотекой Subsys_JsHttpRequest_Js для динамической подгрузки данных. У меня есть задача, при закрытии окна, мне нужно записать кое-какие данные в базу данных. Но в body прописую событие onUnload и назначаю функцию которая через библиотеку Subsys_JsHttpRequest_Js обращается к базе данных и должна по идеи записать туда данные. Но когда пытаюсь, туда что-то записать именно в событии onUnload ничего не работает, то есть в базу данных ничего не записывается. А вот когда я ту же самую функцию назначаю на событие onLoad тогда код срабатывает.

    Кто работал с этой библиотекой и знает, в чем тут дело, пожалуйсто напишите.
     
  2. Anonymous

    Anonymous Guest

    Дело не в ней, дела в событии onUnload. В общем, плохо оно работает, и в разных браузерах - по разному.
    Есть еще одно событие - onBeforeUnload, попробуй его..
     
  3. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Нет на событие onBeforeUnload код тоже не срабатывает.

    Сама то функция которую на назначил на событие onBeforeUnload срабатывает, хотя она срабатывала и на событие onUnload но видимо не происходит обращение на сервер, потому, что в базу данных ничего не записывается.

    Вот код:

    Код (Text):
    1.  
    2. function recordAmount()
    3. {              
    4.     alert(amount);
    5.     //return;
    6.    
    7.     var req = new Subsys_JsHttpRequest_Js();
    8.     var men_id = 1212;
    9.     var woman_id = 1414;
    10.        
    11.     req.onreadystatechange = function()
    12.     {
    13.         alert(req.responseText);
    14.        
    15.         //return true;
    16.     }
    17.        
    18.     req.caching = false;
    19.     req.open('POST', 'validate.php', true);
    20.     req.send({ action: 'recordAmount', men: men_id, woman: woman_id, amount: amount });
    21. }
     
  4. Сразу скажу - задача дурацкая.
    И дело её постановке, а не в самой библиотеке.
     
  5. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Ну дурацкая или не дурацкая это мне решать. Другого выхода я не вижу.

    Вот например я пишу платный чат, на javascript'е я подсчитываю сколько времени пользователь проговорил, а потом при закрытии мне нужно эту сумму записать в базу данных. Вот как мне это еще сделать.

    Такой вариан что типа записуй поминутно или что-то подобное не подходит. Заказчик хочет, чтобы сумма разговора записывалась в базу одной записью а не тысячами.

    Как еще можно по другому эту задачу решить?
     
  6. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    повесить кнопку: Выход :)

    а ссылку на сайт дашь? ;)))
     
  7. Anonymous

    Anonymous Guest

    Первый абзац не связан со вторым АБСОЛЮТНО.
    Аксиома 1: HTTP - контекстно-свободный протокол. Это значит он не несет данных о текущем состоянии клиента после получения данных.

    А если я подменю Яваскрипт? И буду тебе такие данные посылать ответом, что ты мне еще должен будешь 1000 $ ?
    Аксиома 2: Все критичные вычисления можно делать лишь на стороне сервера.
    3: Заказчику должно быть п....й. Ему важен результат, или реализация?
    И главное - то, что ты не хочешь записать 1000 строк вместо одной еще не говорит о том, что нельзя записать 1000 строк вместо одной.
     
  8. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Тогда никто за Ваш чат платить не будет ;)
    Это же самая натуральная дыра в ПО. Я просто возьму и вместо того,чтобы закрывать браузер убью его. Все, никаких onunload и т.п. не будет - значит денег я не заплачу. Или я просто отключу яваскрипт перед закрытием страницы - тоже никакого обработчика. Такие "фишки" легко распространяются среди пользователей - стоит хотя бы одному найти такой способ. Им не обязательно понимать технологию процесса,если у них будет рецепт обхода процедуры оплаты.
    Поэтому вам просто нужно изложить все эти моменты заказчику и писать поминутно (или как у вас в тарифах все это прописано).
     
  9. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    не знаю, по теми ли вопрос: кто-ть знает как работает биллинг у билана?
     
  10. ХАХАХАХАХА!
    Вот это супер!
    Вот спасибо! Хорошее настроение на весь день!
    Ты ещё слова отдельно считай, сколько он наговорил!
    Ой не могу, умора! =))))
     
  11. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Вообщем я попросил, чтобы мне решили помочь эту проблемму, а не обсуждением всего угодно кроме того, что я хотел узнать. Так что пожалуйста если кто знает ответьте
     
  12. Но ты же попросил, а не потребовал, верно?
    А мы, вроде бы, пока ещё не твои рабы, чтобы делать только то, о чем ты попросил?
    Здесь, мне казалось, свободный форум, где люди общаются на самые разные темы. А не служба технической поддержки проектов пользователя pr0n1x
     
  13. mz

    mz Активный пользователь

    С нами с:
    31 янв 2006
    Сообщения:
    77
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    проникс:
    тебе ж уже ответили на все вопросы, которые ты задал, и которые у тебя еще только будут появляться :)
     
  14. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    pr0n1x, погоди, объясни лучше: по какому принцыпу ты посылаешь пользователям сообщения...
     
  15. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Ж)) а что, новая ветка форума :)
     
  16. mz

    mz Активный пользователь

    С нами с:
    31 янв 2006
    Сообщения:
    77
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Тебе надо решить, ты чего хочешь, денег брать, или время подсчитывать. А далее уже искать оптимальное решение по достижению выбранной цели.
     
  17. Хороший, кстати, вопрос. правильный.
     
  18. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Что значит по какому принципу???????????

    Мне нужно подсчитать сколько времени пользователь прообщался, и при закрытии окна мне нужно записать это количество в базу данных, как мне это сделать?
     
  19. Тебе не нужно это делать при закрытии окна.
     
  20. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Ну да, а как еще можно это сделать?
     
  21. pr0n1x

    pr0n1x Активный пользователь

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    и + у меня еще одна задача есть, когда один пользователь уходит у второго должно закрываться окно чата. А пользователь уходит в том случае когда он закрывает окно. Мне тоже нужно что-то записывать в базу данных, чтобы у второго пользователя я проверял эту запись и потом тоже у него закрывал окно
     
  22. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    pr0n1x
    видимо ты немного недопонял меня
     
  23. Aloise

    Aloise Активный пользователь

    С нами с:
    29 окт 2006
    Сообщения:
    1
    Симпатии:
    0
    сделай в базе данных таблицу сессий пользователя. Как только пользователь авторизуется - добавляй запись в эту таблицу, запоминая время начала сессии. Как только к пользователю приходит сообщение или от пользователя уходит сообщение - обновляй запись в таблице сессий - меня на текущее поле окончания сессии. Далее, наверное, понятно.
     
  24. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    1. Определяешь единицу времени Х по которой происходит пересчет средств, например 30 секунд.
    2. Каждые Х секунд отправляешь на сервер запрос.
    3. Запрос не должен передавать ни время не стоимость, лучше пусть он спрашивает можно ли человеку дальше общаться (баланс > 0)
    4. Если запрос поступил на сервер, уменьшаешь баланс пользователя на Х*Стоимость, увеличиваешь количество проведенного времени в онлан на Х, возвращаешь 1, если баланс > 0 или 0 если меньше 0 (вообще возвращать что-либо совсем не обязательно).

    Вообще лучше приурочить обновление времени и бьаланса к обновлению/передачи сообщений, о чем тебе уже намекали.

    И еще проверка на то может ли пользователь еще отправлять сообщения и получать обязательно должна быть в соответствующих функциях на стороне сервера и только в качестве дополнения в JS.