如何停止函数重载

时间:2018-09-11 07:52:43

标签: php jquery ajax

$('.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,并以2秒钟的间隔传递了参数(limit=24)(使聊天页面保持最新状态)。

但是,当我选择其他联系人时,就会出现问题。 convo_id发生变化,$('.contact').click(function() {使用参数sendRequest()调用(limit=8)

但是,超时同时使用旧参数(limit=24)调用相同的函数。因此,整个页面每秒在来回显示两组结果(8条消息和24条消息)之间闪烁。

0 个答案:

没有答案