Итак, я попытался создать обычную чат-комнату для своего сайта. Я успешно подключился к базе данных, сообщения пишутся, и они получают все в порядке.
Моя проблема в том, что сообщения, которые возвращаются из базы данных, отображаются буквами и построчно. Кроме того, у меня есть <body onload="setInterval('chat.update()', 1000)">
на моей странице chat.php
, который, кажется, загружает одно и то же сообщение снова и снова, пока не будет введено новое сообщение.
(см. Путь к скриншоту, недостаточно репов для размещения изображения)
Я подозреваю, что я возвращаю строку, а не массив строк, поэтому сообщения отображаются так, как они есть. Я довольно новичок в javascript и AJAX, поэтому я не уверен, что делать дальше.
Может кто-нибудь поделиться каким-либо советом о том, как вернуть и массив сообщений, который, возможно, решит мою проблему?
Заранее спасибо!
Запуск базы данных MYSQL с отправкой chat.js
в process.php
. chat.php
имеет HTML-код для области сообщений.
chat.php
<div class="container chat-container">
<div id="page-wrap">
<h2 class="forum-header">Discussion Room for: <?php echo "$session" ?> </h2>
<br>
<p id="name-area"></p>
<div id="chat-wrap"><div id="chat-area"></div></div>
<div class="md-form">
<form id="send-message-area">
<label class="message-label" for="form7">Your Message</label>
<textarea id="sendie" maxlength = '100' class="md-textarea form-control" rows="3"></textarea>
</form>
</div>
</div>
</div>
</body>
chat.js
//Updates the chat
function updateChat() {
if (!instanse) {
instanse = true;
$.ajax({
type: "POST",
url: "process.php",
data: {
'function': 'update',
'state': state
},
dataType: "json",
success: function (data) {
if (data.text) {
for (var i = 0; i < data.text.length; i++) {
$('#chat-area').append("<p>" + 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('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;
Также я использовал echo json_encode ($ log);
Снимок экрана консоли