我正在使用NodeJS中的长轮询实时AJAX应用程序。我想检测用户何时关闭具有待处理长轮询请求的选项卡。我使用NodeJS连接关闭事件:
request.connection.on('close', function () {
console.log(request.url);
...
});
AJAX循环如下所示:
var EventLoop = new (function () {
var self = this;
this.listen = function () {
$.postJSON(
'recieve-events',
{ /* some data not important for this issue */ },
function (data) {
...
self.listen();
}
);
}
})();
这是postJSON函数的定义方式:
$.extend({
postJSON: function (url, data, callback) {
$.ajax({
'url': url,
'dataType': 'json',
'data': data,
'type': 'POST',
'success': callback
});
}
});
问题是,当我关闭选项卡时,连接关闭事件被触发两次。任何人都可以解释为什么以及如何防止这种行为?
我知道,我可以使用计数器并在第一次调用回调函数,但我不认为这是一个很好的解决方案,因为关闭某些东西对我来说没有逻辑意义,已经关闭。 (两次发射事件)