如何停止当前的ajax连接并启动一个新连接?

时间:2011-03-27 08:10:43

标签: jquery ajax load chat

我有一个聊天框,它将在我的内容页面上使用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"/>&nbsp; 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();

1 个答案:

答案 0 :(得分:1)

setTimeout(this, 20000);被破坏,this引用该上下文中的jquery对象,而不是函数。检查你的javascript控制台,你会看到一个错误。

您无需clearTimeout进行单独的ajax调用。此外,您的通话可能无效,因为您指的是变量timer,其中第一次调用setTimeout的超时ID,但任何连续调用都将返回新的身份证。因此,您需要在updateMsg变量作业中添加timer = setTimeout(updateMsg,20000);

如果您的初始代码是在与$()分开的updateMsg块中执行的,那么定时器只会在该块中显示,并且更改updateMsg中的定时器将不起作用, 另一个问题。如果是,请将timer设为全局,或将其附加到全局对象,或将updateMsg放在$()块中。

最后,无论如何,您应该使用setInterval,而不是每次都回忆setTimeout,这就是它的用途。