Есть система диалогов пользователей (картинка 1) и в ней список диалогов переобновляется каждую сек Ajaxом. Дело в том что при наведении на блок и при переобновлении диалогов анимация наводки начинаем мерцать каждую секунду. Это весьма логично. Но как это можно исправить, наводка диалогам очень нужна. Код ajax (рисунок 2,3). Необходимо убрать данное мерцание. Возможно есть способ не посылать каждую секунду диалоги а проверять наличие чего-то нового, а потом уже запроч на сами диалоги если есть изменения.
jQuery / js code
var protect = 'dialogServer';
setInterval(function() {
$.ajax({
url: '../forms/ajax/dialogues.php',
type: 'POST',
cache: true,
data: ({protect: protect}),
dataType: 'json',
success: function successMsg(dia){
$("#dialogues").empty();
for (d = 0;d < dia.dialog.length;d++) {
$("#dialogues").append(
'<div id="dia" class="'+d+'">' +
'<a href="/profile?username='+ dia.user[d].username +'">' +
'<div id="user-image">' +
'<img src="images/users/'+ dia.user[d].photo_url +'" height="53" alt="">' +
'</div>' +
'</a>' +
'<a class="dialog-messages" alt="?id='+ dia.user[d].id +'&dia='+ dia.dialog[d].id+'" id="name'+d+'">' +
'<div id="main-buttond-dia">' +
'<div>' +
'<p class="name-user-mess">'+ dia.user[d].name + ' ' + dia.user[d].surname + '</p><p class="time-mess">'+ dia.countFasleMess[d].countMess + '</p>' +
'</div>' +
'<div class="mini-mess">'+
'<p>'+ dia.miniText[d].msg + '</p>'+
'</div>'+
'</div>'+
'</a>'+
'</div>');
}
if (dia.dialog.length > 0) {
$('.nomess').text(dia.dialog.length + num2str(dia.dialog.length, [' диалог', ' диалога', ' диалогов']));
} else {
$('.nomess').text('Диалогов нет');
}
$(".dialog-messages").on('click', function () {
name = $(this).attr('id');
newname = $("#" + name).attr('alt');
window.history.pushState('1', 'Mew page', newname);
setTimeout(function () {
var block = document.getElementById("msges");
block.scrollTop = block.scrollHeight;
}, 1000);
});
}
});
}, 1000);
php код
<?php
if (!empty($_POST['protect'] == 'dialogServer')) {
session_start();
if (!empty($_SESSION['auth'])) {
require '../../protection/db-connect.php';
$userInfo = $dbSelect->prepare('SELECT `id` FROM `users` WHERE `username` = :username');
$userInfo->execute([':username' => $_SESSION['auth']['username']]);
$userInfo->setFetchMode(PDO::FETCH_OBJ);
$userInfoData = $userInfo->fetch();
$selectDialogs = $dbSelect->prepare('SELECT * FROM `dialogue` WHERE `id_sender` = :id_sender AND `activity` = "true" OR `id_recipient` = :id_recipient AND `activity` = "true"');
$selectDialogs->execute([':id_sender' => $userInfoData->id, ':id_recipient' => $userInfoData->id]);
$selectDialogs->setFetchMode(PDO::FETCH_ASSOC);
$selectDialogsData = $selectDialogs->fetchAll();
$messDia = $dbSelect->prepare('SELECT * FROM `msg` WHERE `id_dialog` = :id_dialog ORDER BY `id` DESC');
$checkCount = $dbSelect->prepare('SELECT COUNT(`id`) AS `countMess` FROM `msg` WHERE `id_dialog` = :id_dialog AND `status` = "false" AND `id_sender` != :id_sender');
$userInfoNoMy = $dbSelect->prepare('SELECT `name`,`surname`,`photo_url`,`username`,`id` FROM `users` WHERE `id` = :id');
for ($i = 0; $i < count($selectDialogsData);$i++) {
if ($selectDialogsData[$i]['id_sender'] === $userInfoData->id) {
$myId = $userInfoData->id;
$nomyId = $selectDialogsData[$i]['id_recipient'];
} else {
$myId = $userInfoData->id;
$nomyId = $selectDialogsData[$i]['id_sender'];
}
$userInfoNoMy->execute([':id' => $nomyId]);
$userInfoNoMy->setFetchMode(PDO::FETCH_ASSOC);
$userInfoNoMyData[$i] = $userInfoNoMy->fetch();
$messDia->execute([':id_dialog' => $selectDialogsData[$i]['id']]);
$messDia->setFetchMode(PDO::FETCH_ASSOC);
$messDiaData[$i] = $messDia->fetch();
$checkCount->execute([':id_dialog' => $selectDialogsData[$i]['id'], ':id_sender' => $userInfoData->id]);
$checkCount->setFetchMode(PDO::FETCH_ASSOC);
$checkCountData[$i] = $checkCount->fetch();
}
echo json_encode(array(
"dialog" => $selectDialogsData,
"user" => $userInfoNoMyData,
"miniText" => $messDiaData,
"countFasleMess" => $checkCountData
));
} else {
header('Location: ../../login');
}
} else {
header('Location: ../../');
}
html код
<div id="dialog">
<div id="buttons-mess">
<a href="/profile">Вернуться</a>
<p class="mess-text-nav">Сообщения</p>
</div>
<form action="">
<input type="search" name="" id="searchNewMess" placeholder="Написать новое сообщени">
</form>
<div id="resultsSearch"></div>
<div id="dialogues"></div>
<p class="nomess"></p>
</div>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть база данных db_cars Запрос к базе данных должен выводить марку и модель автомобиля, свойства которого укажет пользовательЕсли запрос забить...
Есть 2 приложенияОба приложения имеют определение интерфейса ICollback