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

发布于 2024-10-27 09:40:17 字数 981 浏览 5 评论 0原文

我有一个聊天框,它将使用 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();

i have a chat box that will load new messages using ajax on my content page and it will listen for new ones every 20s. It is working. However, right now i have another link that will allow a user to load previous messages. And that button does not seem to work even though i have already done a clearTimeout() on the existing ajax function. any idea why?

My scripts:

   //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();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

奢望 2024-11-03 09:40:17

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

您不需要 clearTimeout 来进行单独的 ajax 调用。此外,您的调用可能不起作用,因为您引用的是变量 timer,该变量具有对 setTimeoutfirst 调用的超时 ID,但是任何连续的调用都会返回一个新的 id。因此,您需要在 updateMsg 中添加变量赋值:timer = setTimeout(updateMsg,20000);

如果您的初始代码在与 updateMsg 分开的 $() 块中执行,则计时器将仅在该块中可见,并在 updateMsg 中更改它code> 不会有效果,另一个问题。如果是这样,请将 timer 设置为全局,或者将其附加到全局对象,或者将 updateMsg 放入该 $() 块中。

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

setTimeout(this, 20000); is broken, this refers to a jquery object in that context, not a function. Check your javascript console and you'll see an error.

You don't need to clearTimeout to make a separate ajax call. Moreover, your call might not work because you're referring to the variable timer which has the timeout id from the first call to setTimeout, but any successive call will return a new id. So you need to add in your updateMsg the variable assignment: timer = setTimeout(updateMsg,20000);.

If your initial code is being executed in a $() block separate from updateMsg, then timer will only be visible in that block and changing that in updateMsg won't have an effect, another problem. If so, either make timer global, or attach it to a global object, or put updateMsg in that $() block.

Lastly, you should be using setInterval anyway, instead of recalling setTimeout every time, that's what it is made for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文