$('.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条消息)之间闪烁。