我有一个聊天框,它将在我的内容页面上使用ajax加载新消息,并且它将每隔20秒收听一个新消息。这是工作。但是,现在我有另一个链接,允许用户加载以前的消息。即使我已经在现有的ajax函数上完成了clearTimeout(),该按钮似乎也不起作用。知道为什么吗?
我的脚本:
//for loading previous messages
var timer;
$('#getoldmessages').click(function() {
$("#workroom_boxes_chatpast").html('<img src="{{ MEDIA_URL }}images/ui-anim_basic_16x16.gif"/> Loading...');
$.ajax({
url: "/messages/{{ chat.key.id }}",
cache: false,
success: function(html){
$("#chatcontent").html(html);
$("#workroom_boxes_chatpast").html('Loaded');
}
});
clearTimeout(timer);
});
//for new messages
function updateMsg() {
$.ajax({
url: "/recent/messages/{{ chat.key.id }}",
cache: false,
success: function(html){
$("#chatcontent").html(html);
}
});
//alert('repeating');
t = setTimeout(updateMsg, 20000);
}
updateMsg();
答案 0 :(得分:1)
setTimeout(this, 20000);
被破坏,this
引用该上下文中的jquery对象,而不是函数。检查你的javascript控制台,你会看到一个错误。
您无需clearTimeout
进行单独的ajax调用。此外,您的通话可能无效,因为您指的是变量timer
,其中第一次调用setTimeout
的超时ID,但任何连续调用都将返回新的身份证。因此,您需要在updateMsg
变量作业中添加timer = setTimeout(updateMsg,20000);
。
如果您的初始代码是在与$()
分开的updateMsg
块中执行的,那么定时器只会在该块中显示,并且更改updateMsg
中的定时器将不起作用, 另一个问题。如果是,请将timer
设为全局,或将其附加到全局对象,或将updateMsg
放在$()
块中。
最后,无论如何,您应该使用setInterval
,而不是每次都回忆setTimeout
,这就是它的用途。