как остановить перегрузку функции - PullRequest
0 голосов
/ 11 сентября 2018
$('.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 сообщения) каждую секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...