Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 10

Обновление не существующих сообщений ajax

26.11.2012, 04:51. Показов 1279. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста реализовать обновление удаленных сообщений, которых уже нет в БД через ajax? А именно чтобы при нажатии на ссылку скрывалась запись..

Простейший чат:


Получаем сообщения:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    function get_chat_messages () 
    {   
        if ($('#block').val() == 'no') // если не выставлена блокировка повторного выполнения данной функции, продолжаем
        {
            $('#block').val('yes'); // ставим блокировку
            var last_act = $('#last_act').val();
            $.ajax(
            {
                url: 'func/chat_scripts.php',
                type: 'POST',
                data: 
                {
                    'action': 'get_chat_message',
                    'last_act': last_act
                },
                dataType: 'json',
                success: function (result) 
                {
                    $('#block').val('no');
                    
                    $('#chat_text_field').append(result.message_code); // добавляем в текстовое поле новые сообщения
                    $('#last_act').val(result.last_act); // обновляем значение последнего сообщения 
                    // автопрокрутка текстового поля вниз
                    $('#chat_text_field').scrollTop($('#chat_text_field').scrollTop()+100*$('.chat_post_my, .chat_post_other').size()); 
                    
                    
                    
                } // конец success
            }); // конец ajax  
        }
        
    }
Сервер обрабатывает:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// получение новых сообщений
if ($_POST['action'] == 'get_chat_message')
{
    $last_act = safe_var($_POST['last_act']); // номер бывшего последнего сообщения
    
    $sel_result = mysql_query("SELECT * FROM chat_logs WHERE id > '$last_act' ORDER BY message_date ASC, id ASC");
        
    if (mysql_num_rows($sel_result)>0) 
    {
        $sel_row = mysql_fetch_array($sel_result);
 
        do 
        {
            if ($sel_row['nickname'] == $_SESSION['login']) // собственное сообщение
            {
                $message_code .= '<p class="chat_post_my"><span class="chat_mess_time"><strong>['.date("H:i:s",strtotime($sel_row['message_date'])).']</strong> - </span><span class="chat_nickname">'.$sel_row['nickname'].': </span>'.$sel_row['message_text'].'</p>';
            }
            else // чужое сообщение
            {
                $message_code .= '<p class="chat_post_other"><span class="chat_mess_time"><strong>['.date("H:i:s",strtotime($sel_row['message_date'])).']</strong> - </span><span class="chat_nickname" onclick="chat.splace2(\''.$sel_row['nickname'].',\',\'bb\');"><a href="#">'.$sel_row['nickname'].'</a>: </span>'.$sel_row['message_text'].'</p>';
            }
 
            $last_act = $sel_row['id']; // номер текущего последнего сообщения
        }
        while($sel_row = mysql_fetch_array($sel_result));
        $message_code = preg_replace("/(\[)([abc]{1,1}[a-z]{1,1}|[d]{1,1}[a-v]{1,1})(\])/","<img src=\"https://www.cyberforum.ru/images/smiles/\${2}.gif\" />",$message_code,-1);
        // отправляем полученные переменные в формате json
        $data_str = array('message_code' => $message_code, 'last_act' => $last_act);
        echo json_encode($data_str); 
    }   
}
И выводим:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div id="chat_body">
    
        <div id="chat_text_field" style="height:500px;">
            <?php
            $message_code = preg_replace("/(\[)([abc]{1,1}[a-z]{1,1}|[d]{1,1}[a-v]{1,1})(\])/","<img src=\"https://www.cyberforum.ru/images/smiles/\${2}.gif\" />",$message_code,-1);
            echo $message_code; ?>
 
            </div>
      
       
        <input id="last_act" name="last_act" type="hidden" value="<?php echo $last_act; ?>" /><!--Номер последнего сообщения-->
        <input id="block" name="block" type="hidden" value="no" /><!--Блокировка повторного выполнения функции get_chat_messages()-->
        
        
        <div><sub>Отправить сообщение: Ctrl+Enter</sub></div>
        <textarea id="chat_text_input" name="chat_text_input"></textarea>
        <input id="chat_button" name="chat_button" type="button" value=""/>
         
    </div>
Добавлено через 49 минут
Вот нашел ajax функцию, подскажите как сделать скрытие записи не только у нажавшего на элемент delete

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        $(function() {
        $(".delete").click(
            function() {
                var commentContainer = $(this).parent();
                // получаем значение элемента
                var commentId = $(this).attr("id");
                
                // Отправляем Ajax запрос методом POST, переменную id со значением commentId
                $.post("delete.php",{id : commentId},AjaxSuccess); 
                function AjaxSuccess(data)
                {
                    // Здесь мы получаем данные, отправленные сервером и обрабатываем их
                    if (data) {
                        switch (data) {
                            case 'ERROR1' : 
                                alert('Полученны не верный параметр id!');
                            break;
                            case 'ERROR2' : 
                                alert('Не удалено!');  
                            break;
                            default:
                                alert(data);
                                commentContainer.slideUp('slow', function() {$(this).remove();});
                        }
                    }
                    else alert('Ошибка передачи данных!');
                }
                
                return false;
            }
        );
    });
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2012, 04:51
Ответы с готовыми решениями:

Непрерывное обновление сообщений в чате
думаю все из вас встречались с подобным скриптом, который я приведу чуть ниже. Он непрерывно выводит сообщения в чат, просто непрерывно...

Вывод сообщений от сервера, в пределах одного ajax-запроса
Есть страница с формой отправки файла, этот файл отправляется на сервер где с ним могут проделываться разные операции (очень долгая, более...

Обновление с ajax'ом
незнаю ajax :( если комуто не трудно выручите там где показать чтоли надо чтоб обнавлялся каждую секунду . спасибо заранее всем . ...

14
 Аватар для megaguru
16 / 16 / 1
Регистрация: 12.11.2012
Сообщений: 193
26.11.2012, 12:48
Цитата Сообщение от tayler882 Посмотреть сообщение
помогите пожалуйста реализовать обновление удаленных сообщений, которых уже нет в БД через ajax
А у вас, извините, сообщения откуда берутся, если не из базы?
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 10
26.11.2012, 12:54  [ТС]
сообщения берутся из базы, в коде разве не видно?
0
 Аватар для megaguru
16 / 16 / 1
Регистрация: 12.11.2012
Сообщений: 193
26.11.2012, 12:56
Т.е.имеется в виду, что в базе сообщения нет а в чате оно всё ещё присутствует?
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 10
26.11.2012, 23:30  [ТС]
я имею ввиду чтобы сообщения скрывались не только у человека нажавшего delete, а у всех..

Добавлено через 9 часов 2 минуты
UPPPP

Добавлено через 1 час 28 минут
Цитата Сообщение от megaguru Посмотреть сообщение
Т.е.имеется в виду, что в базе сообщения нет а в чате оно всё ещё присутствует?
именно так.
0
3 / 3 / 2
Регистрация: 13.08.2012
Сообщений: 53
26.11.2012, 23:46
А вы можете как то классифицировать человека,нажавшего delete? да и 'всех' то же не мешало бы определить как то, а то не совсем ясно.А вообще если я правильно понял задачу, то вам можно например: установить вызов функции, занимающейся обновлением, по таймеру.
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 10
27.11.2012, 00:21  [ТС]
Цитата Сообщение от psk-ru Посмотреть сообщение
А вы можете как то классифицировать человека,нажавшего delete? да и 'всех' то же не мешало бы определить как то, а то не совсем ясно.А вообще если я правильно понял задачу, то вам можно например: установить вызов функции, занимающейся обновлением, по таймеру.
функция получения новых сообщений стоит по таймеру, но она получает исключительно "новые" сообщения, т.е. не грузит заного массив сообщений..
вот думаю необходимо по щелчку delete передавать в эту функцию id элемента и скрывать его там.. поможете реализовать?
0
3 / 3 / 2
Регистрация: 13.08.2012
Сообщений: 53
27.11.2012, 00:52
ну а почему бы тогда не загрузить например 10 последних элементов массива сообщений перед этим очистив 'чат'
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 10
28.11.2012, 04:28  [ТС]
Цитата Сообщение от psk-ru Посмотреть сообщение
ну а почему бы тогда не загрузить например 10 последних элементов массива сообщений перед этим очистив 'чат'
ну это мне кажется не очень удобно каждый раз загружать по 10 элементов, мой вариант мне больше нравится.

Добавлено через 8 часов 59 минут
Поможете, добрые люди?)

Добавлено через 8 часов 7 минут
UPPPP
0
3 / 3 / 2
Регистрация: 13.08.2012
Сообщений: 53
28.11.2012, 13:56
Цитата Сообщение от tayler882 Посмотреть сообщение
вот думаю необходимо по щелчку delete передавать в эту функцию id элемента и скрывать его там
если уж на то пошло то id элемента нужно предавать не этой функции а какой нибудь типа
JavaScript
1
2
3
4
function deleteMesages(id)
{
 удаляем то что нужно;
}
ИМХО
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 10
28.11.2012, 16:50  [ТС]
Решил сделать пока только скрытие элемента. Пишу вот так:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    // перехватываем значение id элемента с классом delete
    $(function() {
        $(".delete").click(
            function() {
                var commentContainer = $(this).parent();
                // получаем значение элемента
                //var commentId = $(this).attr("id");
 
                AjaxSuccess(commentContainer); 
 
                
                return false;
            }
        );
    }); 
 
    
                    function AjaxSuccess(commentContainer)
                {
                                commentContainer.slideUp('slow', function() {$(this).remove();});
                }

Что не правильно? Почему только у нажавшего скрывается commentContainer?
0
3 / 3 / 2
Регистрация: 13.08.2012
Сообщений: 53
29.11.2012, 01:13
Цитата Сообщение от tayler882 Посмотреть сообщение
Что не правильно? Почему только у нажавшего скрывается commentContainer?
а у кого он еще должен скрыться?
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 10
29.11.2012, 10:17  [ТС]
Цитата Сообщение от psk-ru Посмотреть сообщение
а у кого он еще должен скрыться?
Ну а подскажешь как передать это чтобы скрылся не только у нажавшего?
0
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 10
01.12.2012, 02:33  [ТС]
UUUPPPP
0
Веб-мастер
 Аватар для Maksimchikfull
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674
01.12.2012, 11:53
tayler882, к каждому сообщению приклеиваете ID. Пользователи проверяя базу на существование записей, удаляют те которых уже не видят.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.12.2012, 11:53
Помогаю со студенческими работами здесь

Ajax обновление контента
Добрый день! Не натолкнете на мысль? У меня на сайте есть блок отображения онлайн сервера, я хочу прикрутить кнопку с функцией...

Ajax обновление капчи - дырка в безопасности
Доброго времени суток. Зашел в тупик, помогите решить проблему. Есть страница регистрации пользователя, на которую выводится...

Работа с ajax. Обновление данных на странице
Имеются два файла Основной: &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset=&quot;utf-8&quot;&gt; &lt;meta name=&quot;description&quot;...

Обновление не существующих сообщений ajax
Здравствуйте, помогите пожалуйста реализовать обновление удаленных сообщений, которых уже нет в БД через ajax? А именно чтобы при нажатии...

Отправка сообщений. ajax
Здравствуйте, Подскажите как сделать такую вещь: имеется два контейнера, в одном список контактов, в другом сообщений. То есть,...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru