$('.contact').click(function() {
$('.cont').not(this).removeClass('active');
$(this).addClass('active');
var limit = 8;
var start = 0;
sendRequest(limit, start);
loader();
function loader (){
var scrollTop = $('.messages').scrollTop();
if (scrollTop <= 0) {
$('.signal2').show();
} else {
$('.signal2').hide();
}
setTimeout(function() { loader(); }, 500);
};
function sendRequest(limit, start) {
var scrollPosition = $('.messages').scrollTop();
var scrollHeight = $('.messages')[0].scrollHeight;
var convo_id=document.getElementById("convo_id").value;
$.ajax({
cache: false,
type: "POST",
url: 'show_chat.php',
data: ({ convo_id: convo_id, limit: limit, start:start }),
success: function(data) {
alert(limit);
if (data != '') {
var scrollTop = $('.messages').scrollTop();
if (scrollTop <= 0) {
limit = limit + 8;
$('.messages').scrollTop(30);
}
}
if (scrollPosition + $('.messages').height() === scrollHeight) {
$('.messages').animate( { scrollTop:scrollHeight},700);
}
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(function(){ sendRequest(limit, start); }, 2000); // The interval set to 5 seconds
}
});
};
Это мой код, я постараюсь объяснить:
$('.contact').click(function() {
- это когда пользователь выбирает контактное лицо.
limit
- это предел для запроса, который выбирает пользовательские чаты.
convo_id
используется для поиска беседы пользователя.
Теперь все работает нормально, но, когда я нахожусь в определенном чате, и я загрузил больше чатов, прокрутив страницу вверх, 3 раза, мое текущее предельное значение будет 8*3=24
.
Поэтому вы можете видеть, что я вызываю эту функцию function sendRequest(limit, start){
из вызова timeout
, передавая параметр (limit=24)
с интервалом в 2 секунды (поддерживая актуальность страницы чата).
Но проблема возникает, когда я выбираю другое контактное лицо. convo_id
изменяется и $('.contact').click(function() {
вызывает sendRequest()
с параметром (limit=8)
.
Однако та же функция вызывается тайм-аутом со старым параметром в то же время (limit=24)
. Поэтому вся страница мигает между отображением двух наборов результатов туда и обратно (8 сообщений и 24 сообщения) каждую секунду.