[英]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()(例如,停止小部件click事件)
什么是按需调用此电话的正确方法是
setTimeout
循环 我尝试过的事情,例如按名称调用函数,尝试将超时设置为全局var并停止超时,都使以上几点之一失败或根本没有调用。
将setTimeout
移至success
处理程序,并使用clearTimeout
保持单循环运行。
具有public .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/
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.