如何使用PHP和Javascript更新聊天室

时间:2019-03-31 13:24:06

标签: javascript php html sql

我在显示数据库中的消息时遇到问题。我的网站上有一个简单的聊天室,在读取/写入文本文件时可以很好地工作。我现在正尝试使用名为messages的表将其链接到数据库。当我向OK表写入数据时,屏幕上未显示消息。

通过使用POSTMAN,我知道我已经成功地与后端通信了,因为当我运行一个请求时-返回了{"state":1,"text":["Welcome all users!"]},这是我输入的最后一条消息,并且json echo ($log)正在工作。

除了updateChat()函数(在下面发布)之外,我还有一个名为getState()的函数,该函数获取聊天的当前状态(行数,是否添加了新行)。

由于我的SQL查询工作正常,因此updateChat()()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 个答案:

答案 0 :(得分:1)

尝试使用ajax捕获错误,如果有的话,向我们展示。

不管

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

这将不起作用。试试这个:

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