我有一个生命,自燃负载和递归调用自己每30秒,以获得任何警报,系统可能已经写出来。
这个很好用。
(function GetAlerts() {
setTimeout(function() {
$.ajax({ url: "?DO=getalertcount", success: function(data) {
//do DOM stuff with data
}, complete: GetAlerts });
}, 30000);
})();我将做一些事情,比如停止一个小部件,将其写入警报队列。因此,应该立即触发要显示的警报,而不是等待30秒才能启动。(由于服务器限制,套接字和长轮询不是选项)
因此,我想从操作的处理程序(例如停止小部件单击事件)以某种方式按需调用这个GetAlerts()。
什么才是点播的正确方式呢?
setTimeout循环运行我尝试过的事情,如按名称调用函数、尝试将超时设置为全局变量和停止超时--所有这些都失败了,或者根本没有调用。
发布于 2014-12-10 21:05:45
将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();
};
}看一下小提琴演示:ai/64on18zg/
希望这能有所帮助!
https://stackoverflow.com/questions/27409040
复制相似问题