Как обновить комнату чата с помощью PHP и Javascript

#javascript #php #html #sql

#javascript #php #HTML #sql

Вопрос:

У меня проблема с отображением сообщений из моей базы данных. На моем сайте есть простая комната чата, которая отлично работала при чтении / записи в текстовый файл. Сейчас я пытаюсь связать его с базой данных с таблицей под названием messages . Пока я пишу в таблицу OK, сообщения не отображаются на экране.

Используя POSTMAN, я знаю, что успешно общаюсь с серверной частью, потому что при запуске возвращается запрос — {"state":1,"text":["Welcome all users!"]} , который является последним введенным мной сообщением, и json echo ($log) работает.

Помимо updateChat() функции (опубликованной ниже) У меня есть функция под названием getState() , которая получает текущее состояние чата (количество строк, добавлены ли новые строки).

Поскольку мои SQL-запросы, похоже, работают нормально, есть ли проблема с моей функцией updateChat() or ()getState ?

По общему признанию, я никогда раньше не создавал чат-комнату, и я немного зациклен на том, куда идти дальше.

Спасибо за любую помощь или совет!

 ****chat.js****

//Updates the chat
function updateChat() {
    if (!instanse) {
        instanse = true;
        $.ajax({
            type: "POST",
            url: "process.php",
            data: {
                'function': 'update',
                'state': state,
                'file': file
            },
            dataType: "json",
            success: function (data) {
                if (data.text) {
                    for (var i = 0; i < data.text.length; i  ) {
                        $('#chat-area').append($( data.text[i]   "</p>"));
                    }
                }
                document.getElementById('chat-area').scrollTop = document.getElementById('chat-area').scrollHeight;
                instanse = false;
                state = data.state;
            }
        });
    } else {
        setTimeout(updateChat, 1500);
    }
}
  
 process.php

 case('getState'):
        $lines = "SELECT messageBody, timeSent, nickname FROM message ORDER BY timeSent";
        $log['state'] = count($lines);
        break;

    case('update'):
        $state = $_POST['state'];

        $lines = "SELECT messageBody, timeSent, nickname FROM message ORDER BY timeSent";
        $result = mysqli_query($conn, $lines);

        if (mysqli_num_rows($result) > 0) {

            while ($row = mysqli_fetch_assoc($result)) {
                $message = $row['messageBody'];
                $time = $row['timeSent'];
                $nickname = $row['nickname'];
            }
        }

        $count = count($lines);
        if ($state == $count) {
            $log['state'] = $state;
            $log['text'] = false;
        } else {
            $text = array();
            $log['state'] = $state   count($lines) - $state;

            $text[] = $message = str_replace("n", "", $message);
        }

        $log['text'] = $message;     
        break;
  

Ответ №1:

Попробуйте отловить ошибки с помощью ajax, если есть, покажите нам.

независимо,

 $('#chat-area').append($( data.text[i]   "</p>"));
  

это не сработает. попробуйте это:

 $('#chat-area').append("<p>"   data.text[i]   "</p>");
  

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

1. $('#chat-area').append("<p>" data.text[i] "</p>"); сработало! Теперь отображаются сообщения, хотя каждая буква находится в одной строке, и одно и то же сообщение отображается снова и снова, пока не будет введен новый ввод. Есть идеи?

2. data.text — это строка, а не массив строк