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

标签 javascript php html sql

我在显示数据库中的消息时遇到问题。我的网站有一个简单的聊天室,在读取/写入文本文件时运行良好。我现在尝试将其链接到带有名为 messages 的表的数据库。当我向表中写入“OK”时,消息未显示在屏幕上。

通过使用 POSTMAN,我知道我已成功与后端通信,因为当我运行请求时 - {"state":1,"text":["欢迎所有用户!"]} 返回,这是我输入的最后一条消息,并且 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;

最佳答案

尝试用ajax捕获错误,如果有,请告诉我们。

无论如何,

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

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

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

关于javascript - 如何使用 PHP 和 Javascript 更新聊天室,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55441351/

相关文章:

php - 查找用户的哪些推文被收藏

javascript - 在手动编辑 window.location 期间忽略 onHashChange

javascript - 未处理的 Promise 拒绝 : Template parse errors on Angular 2

javascript - 插件 illuminate 0.7 与 jQuery 1.9.1 或 jQuery-UI 1.10.3 不兼容 -> TypeError : $. css(...) 未定义

javascript - 为什么 javascript 坚持对函数使用大括号而不对其他任何东西使用大括号?

php - Composer 安装/更新停止工作

php - 多个表中的 UNION ALL

html - CSS 旋转并定位到页面左下角

html - 滚动条在 Internet Explorer 中创建边距

javascript - 当有人离开页面时,如何从我的列表中删除用户?