За последние 24 часа нас посетили 43858 программистов и 1814 роботов. Сейчас ищут 895 программистов ...

Пишу очередной чат, хочу услышать критику и поправки :)

Тема в разделе "JavaScript и AJAX", создана пользователем Invision, 6 июн 2011.

  1. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Каждый раз спустя 3 месяца пишу скрипт чата с нуля, мб звучит глупо, но приятно каждый раз находить новые решения. Причем чем дальше тем лучше... Вот решил выложить третию версию вместе с задизайненым скроллингом кусок кода. (выкладываю только js). При первом обращении к скрипту подгружает последние 15 сообщений, последующие обновит если поступило новое.

    [js] var scroll = '#scrollbar';
    var script_url = 'chat.php'; // Путь до скрипта
    var id_msg = 0; // Стандартное значение (0 - загружает список при первом посещении)
    var update_timer = 1000; // Время обновления новых сообщений в чате (мс)
    function showScroll() { // Функция запускает скроллинг (после того как список сообщений построен)
    $(scroll).tinyscrollbar();
    $(scroll).tinyscrollbar_update('bottom');
    }
    function show_msg() { // Функция загрузки сообщений
    // Получаем последний ID сообщений
    $.get(script_url+'?get_last', function(msg_data) {
    last_id = msg_data;

    // Выполним скрипт ниже если ид последнего сообщения не равно ид текущего.
    if(last_id != id_msg) {
    // Отправляем ID последнего сообщения и последний ID который получил пользователь + получаем объекты (json)
    $.getJSON(script_url, {'last_id' : last_id, 'id_msg' : id_msg}, function (data) {
    $.each(data, function (index, value) {
    id_msg = value["msg_id"]; // Присваиваем последний ID сообщения который получил пользователь
    $('#msg').append('<div class="msg_text">'+value["msg_text"]+'</div>');
    });
    $("#sc_bar").addClass("scrollbar");
    showScroll();
    });
    }
    });

    }
    $(document).ready(function(){
    show_msg();
    setInterval('show_msg()',update_timer);
    }); [/js]

    Так вот, работает прекрасно, но хочу критику и совет) сами понимаете... спасибо :)
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Вовсе нет. Вполне интересный подход.

    Но я бы предложил когда в следующий раз писать будешь, подгружать все последние сообщения которые даёт сервер. Т.е при логине выдавать ID-сессии, и на стороне клиента чтоб был только он. А уже серверная сторона при получении запроса выдавала бы необходимое количество сообщений.
     
  3. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Да это тоже интересно) Но ведь у меня сейчас также берет необходимое кол-во сообщений.. к тому же для проверки выполняется только

    [js]$.get(script_url+'?get_last', function(msg_data) {
    last_id = msg_data;[/js]

    PHP:
    1. if(isset($_GET['get_last'])) {
    2.     $request = mysql_query("SELECT MAX(msg_id) AS last_id FROM msg");
    3.     $row = mysql_fetch_assoc($request);
    4.     die($row['last_id']);
    5. }
     
  4. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Просто сбил с толку фрагмент
    (читал "по диагонали")
    Имхо избавиться от него надо, т.е упростить всё ещё сильнее...
     
  5. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    хм, через json мне в дальнейшем удобно будет вытаскивать данные) да и сейчас легко сразу в переменную id сообщения (последнее который юзер получил) добавить)) а какой способ еще проще?)
     
  6. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Ну да, если удобно то пусть, но
    Первый шаг можно выкинуть к чертям.

    Запрашиваем сообщения:
    - есть новые = приходят
    - нет новых = не приходят
     
  7. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    ну он выполнится если есть новые )