我正在做一些长轮询(ajax),我正在循环下面的代码部分。上面和下面都有代码正在执行。此代码是内部消息传递系统的一部分。当消息到达时,页面的某个部分会闪烁。如果用户检查消息,它将从 JSON 响应中删除 dash_notify,这需要关闭闪烁。见下文:
if (data.dash_notify == '1') {
var x = '#dash_notif_blink';
function blinking(x) {
timer = setInterval(blink, 10);
function blink() {
x.fadeOut(400, function () {
x.fadeIn(400);
});
}
}
console.log("initiate_dash");
blinking($(x));
} else if (!data.dash_notify) {
console.log("good");
clearInterval(timer);
}
发送到此代码的以下 JSON 响应是:
{"current_date_time":"January 8, 2013 - 4:02 pm","dash_notify":"1"}
如果上述数据通过,它会理解初始闪烁。如果以下通过:
{"current_date_time":"January 8, 2013 - 4:02 pm"}
然后它抛出一个错误:
Uncaught ReferenceError: timer is not defined
我无法弄清楚如何修复“其他”部分正常工作。如果在发送完整的 dash_notify:1 响应时启动代码,则它可以完美运行。按钮会闪烁,然后如果用户检查消息,它将不再发送 dash_notify:1 并且按钮停止闪烁。但是如果代码在没有设置 dash_notify:1 时启动,它不知道如何处理 ClearInterval。
基本上我需要修复其他部分。
我尝试过使用不同的 typeOf === undefined 片段,但它不起作用。
任何帮助表示赞赏。
谢谢!
编辑:
这目前正在工作.. Timer 现在在语句上方定义
if(data.dash_notify == '1'){
var x = '#dash_notif_blink';
console.log("initiate_dash");
blinking($(x));
}else if (typeof timer != "undefined" && timer) {
clearInterval(timer);
}
}
这是可行的,但有时它会尝试终止计时器,但实际上并没有这样做。这种情况经常发生。