#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 — это строка, а не массив строк