首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery生活,按需插入?

jQuery生活,按需插入?
EN

Stack Overflow用户
提问于 2014-12-10 19:14:11
回答 1查看 69关注 0票数 1

我有一个生命,自燃负载和递归调用自己每30秒,以获得任何警报,系统可能已经写出来。

这个很好用。

代码语言:javascript
复制
(function GetAlerts() {
   setTimeout(function() {
     $.ajax({ url: "?DO=getalertcount", success: function(data) {
        //do DOM stuff with data            
    }, complete: GetAlerts });
  }, 30000);
})();

我将做一些事情,比如停止一个小部件,将其写入警报队列。因此,应该立即触发要显示的警报,而不是等待30秒才能启动。(由于服务器限制,套接字和长轮询不是选项)

因此,我想从操作的处理程序(例如停止小部件单击事件)以某种方式按需调用这个GetAlerts()。

什么才是点播的正确方式呢?

  1. 保留30秒循环(或在按需插入后重新启动)。
  2. 我不会让多个setTimeout循环运行
  3. 我不会重复大量的代码(因为在成功的过程中会发生很多DOM的事情)

我尝试过的事情,如按名称调用函数、尝试将超时设置为全局变量和停止超时--所有这些都失败了,或者根本没有调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-10 21:05:45

setTimeout移动到success处理程序,并使用clearTimeout保持单循环运行。

具有公共.poll方法的类可能会有所帮助:

代码语言:javascript
复制
function AlertManager() {
    var successCallback = function (data) {
        // Private ajax success handler
        //do DOM stuff with data 
        $('#responses').append('Polled!<br/>');
    },
    _poll = function () {
        $.ajax({
            url: "/echo/json/",
            success: successCallback,
            complete: function () {
                timeoutId = setTimeout(_poll, timeoutMs);
            }
        });
    },
    timeoutId,
    timeoutMs = 5000;

    this.poll = function () {
        clearTimeout(timeoutId);
        _poll();
    };
}

看一下小提琴演示:ai/64on18zg/

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27409040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档