Ajax: как / возможно ли проанализировать ‘.html (ответ)’

#php #ajax #parsing

#php #ajax #синтаксический анализ

Вопрос:

итак, я создаю этот чат и пытаюсь добавить функциональные возможности. Пока что у меня есть вот то, чего я добился.

У меня есть функция, которая отображает сообщения.

 function displayMessages()
    {
        $.post('core/chat.php?action=read',function(response)
        {
            $('.message_display').html(response);
            
        });
}
 

эта функция вызывается каждую секунду

 setInterval(function(){displayMessages();},1000);
 

содержимое «ответа» генерируется на php.

 foreach($messages as $chat_msg)
    {
        echo '<span style="color:#'.$chat_msg['color'].';">['.$chat_msg['user_name'].']:'.$chat_msg['txt'].' </span><br>';              
    }
 

итак, я создаю функцию, которая воспроизводит звук: playsound (file).
Изначально я хотел присоединить его к функции displayMessages ()…

 function displayMessages()
{
        $.post('core/chat.php?action=read',function(response)
        {
            $('.message_display').html(response);

        });
        playSound ("send_message");

}
 

…но, конечно, это воспроизводит звук при каждом обновлении, имея новое сообщение или нет.
Итак, чтобы исправить это, я подумал о добавлении на стороне php кода, который запускает звуки, если было опубликовано новое сообщение: «ex:

 echo $playsoundtrigger="playsound";
 

но тогда я понятия не имею, что делать дальше.
как я могу проанализировать ответ, чтобы ajax разбил html на 1 сторону и $ playsoundtrigger на другой?
что-то в этом роде, я бы подошел так, если бы это был php:

 parse_str("reponse $triger=true");
if ($triger){
   playsound();
}
 

Я ищу функцию синтаксического анализа в ajax, но вся ссылка, которую я смог найти, заключалась в анализе json…
любое решение?
или намекнуть на логику решения моей проблемы?

Примечание: я посмотрел и обнаружил, что ajax может сообщить мне, изменилось ли содержимое, исходя из его стороны, но я не хочу идти этим путем, как хотелось бы в долгосрочной перспективе, чтобы адаптировать звуки в сообщении 🙂

Спасибо

Ответ №1:

Опрос вашего сервера каждую секунду!!! Хм … вы, по сути, подвергаете DDOS-атаке свой собственный сервер. Я думаю, что веб-сокеты — это то, что вам нужно. Но я мало что знаю об этом.

Что касается вашего ответа, вы могли бы на самом деле использовать json, а затем создавать узлы из браузера.

Например:

 $data = [];

foreach ($messages as $chat_msg) {
   $data[] = [
        'color' => $chat_msg['color'],
        'user_name' => $chat_msg['user_name'],
        'txt' => $chat_msg['txt']
   ];
}

echo json_encode([
    'trigger' => 1
    'data' => $data
]);
 

и в вашем js

 function displayMessages()
{
    $.post(
        'core/chat.php?action=read',
        {},
        function(res) {
            var html = '';
            res.data.foreach(function(msg) {
                html  = '<span style="color:#'   msg.color   ';">['   msg.user_name   ']:'   msg.txt   '</span><br>';
            }
            $('.message_display').html(html);
            if(res.trigger) {
                 playSound ("send_message");
            }
        },
        'json'
    );
}
 

Комментарии:

1. привет, спасибо! Я загляну в websockets, никогда не слышал об этом.