Нужно раз в секунду обращатся в базу данных и выводить данные на страницу?
Нужно раз в секунду получать данные из бд и выводит их пользователю, как это можно сделать не отпровляя каждый раз post и не используя вебсокеты, sse
Нужно раз в секунду получать данные из бд и выводит их пользователю, как это можно сделать не отпровляя каждый раз post и не используя вебсокеты, sse
Попробуйте использовать Лонг пуллинг, хоть и эта методика считается старой, но все ещё рабочей, ее смысл в том, что на сервере крутим бесконечный цикл, с клиента посылаем какой то запрос и держим отрытым соединение, если пришел ответ, отдаем его, закрываем соединение и по новой начинаем крутить цикл, думаю, вам стоит почитать про эту тему, тут, на пальцах не смогу объяснить, если нужно будет могу скинуть пример кода, который у меня на сервере отлично работает
пример кода js
<script>
function check(t){
$.ajax({
url: 'im.php',
method: 'POST',
data: { "ts": t, "wait": 20, "group_id": "group_id", "user_id": "user_id"},
success: function(data){
try {
var d = JSON.parse(data);
localStorage.setItem("ts", d.ts);
if(d.w == 0) {
$('#helppp').append(d.content);
}
setTimeout(check(d.ts), 100);
} catch(error) {
alert('Error parsing JSON:', error.message);
}
}
});
}
var t = localStorage.ts;
check(t);
</script>
php (сервер) файл im.php
<?php
require_once('assets/init.php');
// Последнее изменение файла
if(!isset($_POST['group_id'])){
$data['ts'] = false;
$data['content'] = 'error_group';
json_encode($data);
return;
}
function getLastModified()
{
$ts_file = Wo_All_Chat_Select_Last_Time($_POST['group_id']);
return $ts_file;
}
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$ts = $_POST['ts'];
$wait = $_POST['wait'];
if ($ts === "undefined") {
$data['ts'] = getLastModified();
$data['content'] = Wo_All_Chat_SelectLast($_POST['group_id'], $_POST['user_id']);
echo json_encode($data);
return;
}
// Текущее время плюс ожидание
$w = (time() + $wait);
// Крутим бесконечный цикл
while (true) {
// Проверяем изменение файла
if ($ts < getLastModified()) {
// Сразу возвращаем ответ если было изменение
$data['ts'] = getLastModified();
$data['content'] = Wo_All_Chat_SelectLast($_POST['group_id'], $_POST['user_id']);
$data['w'] = 0;
echo json_encode($data);
return;
}
// Отдаем ответ после максимального ожидания
if (time() >= $w) {
$data['ts'] = getLastModified();
$data['content'] = Wo_All_Chat_SelectLast($_POST['group_id'], $_POST['user_id']);
$data['w'] = 1;
echo json_encode($data);
return;
}
// Спим секунду
sleep(1);
}
}
При сохранении сообщения использую поля id, user_id, text, time
Если нужно отправлять сообщение не перезагружая страницу, отправьте его тоже по аяксу, будет вам счастье