我正在寫一個聊天AJAX應用程序。隨機地,在FF 3.5.9中,setInterval()
似乎停止發射。我的代碼中沒有任何地方有clearInterval()
。什麼可能導致這種情況發生?JavaScript:什麼會導致setInterval停止射擊?
$(document).ready(function() {
$("#no-js-warning").empty();
messageRefresher = new MessageRefresher(0);
setInterval($.proxy(messageRefresher, "refresh"), 2000);
});
function notifyInRoom(user) {
$.getJSON('API/users_in_room', { room_id: $.getUrlVar('key'), username: user }, function (users) {
if (!$.isEmptyObject(users)) {
$("#users").empty();
$.each(users, function (index, username) {
var newChild = sprintf("<li>%s</li>", username);
$("#users").append(newChild);
});
}
else {
$("#users-loading-msg").text("No one is in this room.");
}
});
}
function MessageRefresher(latest_mid) {
this._latest_mid = latest_mid;
}
MessageRefresher.prototype.refresh = function() {
notifyInRoom($("#user-name").val());
var refresher = this;
$.getJSON('API/read_messages', { room_id: $.getUrlVar('key'), mid: refresher._latest_mid }, function (messages) {
if (! (messages == null || $.isEmptyObject(messages[0]))) { // messages will always be at least [[], [], 0]
$("#messages-loading-msg").hide();
for (var i = 0; i < messages[0].length; i++) {
var newChild = sprintf('<li><span class="username">%s:</span> %s</li>', messages[1][i], messages[0][i]);
$("#messages").append(newChild);
}
refresher._latest_mid = messages[2];
setUserBlockClass();
}
else {
$("#messages-loading-msg").text("No messages here. Say anything...");
}
});
}
// Give the end-user-block class to the appropriate messages
// eg, those where the next message is by a different user
function setUserBlockClass() {
$("#messages li").each(function (index) {
if ($(this).children(".username").text() != $(this).next().children(".username").text()) {
$(this).addClass("end-user-block");
}
});
}
我檢查了Firebug中的最近的回覆,它與之前發送的回覆相同。 (所以,這不是一個不尋常的響應造成的崩潰。)
如果我刷新頁面,電話恢復。
我在開發的時候在Firebug中設置斷點,然後取消設置它們並點擊「繼續」。有沒有可能導致這個問題? 更新:隨着更多的測試,這似乎可能是問題。
我也在其他瀏覽器中使用該服務,並且通話繼續進行。
你有任何腳本錯誤?如果您添加「警報」呼叫會發生什麼? – SLaks 2010-04-09 00:53:47
沒有腳本錯誤。尚未嘗試警報呼叫。 – 2010-04-09 00:54:36
更好的是用Firebug調用console.log'。 – 2010-04-09 01:23:10