jQuery IIFE,按需插话
jQuery IIFE, interject on demand?
我有一个IIFE,它在加载时自发一次,每30秒递归调用一次,以获取系统可能已经写出的任何警报。
这工作正常。
(function GetAlerts() {
setTimeout(function() {
$.ajax({ url: "?DO=getalertcount", success: function(data) {
//do DOM stuff with data
}, complete: GetAlerts });
}, 30000);
})();
我会做一些事情,例如停止写入警报队列的小部件。 因此,这应该立即触发警报显示,而不是等待长达 30 秒才能触发。 (由于服务器限制,套接字和长轮询不是一个选项(
因此,我想以某种方式从操作处理程序按需调用此 GetAlerts(((例如停止小部件单击事件(
按需调用此的正确方法是什么,以便
- 保留 30 秒循环(或在按需插入后重新启动(
- 我最终不会运行多个
setTimeout
循环 - 我不会复制大量的代码(因为有很多 DOM 的东西发生在成功的内心
我尝试过的事情,例如按名称调用函数,尝试将超时设置为全局变量并停止超时,都失败了上述几点之一,或者根本没有调用。
setTimeout
移动到success
处理程序,并使用clearTimeout
保持单循环运行。
具有公共.poll
方法的类可能会有所帮助:
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();
};
}
看看小提琴演示:http://jsfiddle.net/neustroev_ai/64on18zg/
希望这有帮助!
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- Jquery POST未填充数组
- JQuery使计数器每次更改时都会增加
- 如何在Angular2中使用jQuery插件
- 提高JQuery的性能
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JQuery合并了keyup和focusout两个函数
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- IIFE jquery已准备就绪
- JQuery 承诺:访问外部变量或将结果传递给 .done 内部的 IIFE
- jQuery IIFE,按需插话
- JQuery IIFE 外部文档就绪 - 模式错误
- 为什么jquery源代码不把这个传递给它的IIFE的第一个参数?
- 如何从即时调用函数表达式(IIFE) jquery中返回带参数的函数