長いポーリング(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
「else」部分が正しく機能するように修正する方法がわかりません。完全なdash_notify:1応答が送信されたときにコードが開始された場合、それは完全に機能します。ボタンが点滅し、ユーザーがメッセージを確認すると、dash_notify:1が送信されなくなり、ボタンの点滅が停止します。ただし、dash_notify:1が設定されていないときにコードが開始された場合、ClearIntervalをどう処理するかがわかりません。
基本的にelse部分を修正する必要があります。
別のtypeOf===undefinedスニペットを使用しようとしましたが、機能しません。
どんな助けでも大歓迎です。
ありがとうございました!
編集:
これは現在機能しています。タイマーはステートメントの上に定義されています
if(data.dash_notify == '1'){
var x = '#dash_notif_blink';
console.log("initiate_dash");
blinking($(x));
}else if (typeof timer != "undefined" && timer) {
clearInterval(timer);
}
}
これは機能していますが、タイマーを強制終了しようとすることがありますが、実際には実行されません。これは頻繁に発生します。