Вам нужно сделать проверку новых сообщений по интервалу.
let lastMessageId = null
let checkNewMessageInterval = setInterval(() => {
$.ajax({
url: 'ajax/checkNewMessage.php',
type: 'POST',
cache: false,
data: {last_id: lastMessageId},
dataType: 'html',
success: function(response) {
let lastMessage = response.data[response.data.length - 1]
lastMessageId = lastMessage.message_id // сохраняем последнее сообщение которое получили
// .....
}
})
// ...
}, 5000)
При последнем обновлении, вы можете хранить ID последнего сообщения, а при следующем запросе, получать сообщения только с ID позже сохраненного.
Запрос для БД:
SELECT * FROM chat WHERE `message_id` > $_POST['last_id']
еще лучше, сначала проверять есть ли вообще новые сообщения, и если есть то тогда уже получать эти сообщения:
SELECT COUNT(*) FROM chat WHERE `message_id` > $_POST['last_id']
Это очень простой вариант я описал, но в общем реализация чата через AJAX - это кривой вариант. Вам постоянно придется дергать БД на проверку новых сообщений, и так каждому пользователю.
Лучший и правильный вариант использовать websoket. Используя websoket пользователи будут получать сообщения сразу после их написания, по сути и БД дергать не нужно. Так как БД будет служить только для подгрузки истории сообщений,