JavaScript:什么会导致 setInterval 停止触发?

标签 javascript ajax

我正在编写聊天 AJAX 应用程序。随机地,在 FF 3.5.9 中,setInterval() 似乎停止触发。我的代码中的任何地方都没有 clearInterval()。是什么导致了这种情况的发生?

$(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 中设置断点,然后取消设置并点击“继续”。这是否有可能导致问题? 更新:经过更多测试,这似乎是问题所在。

我也在另一个浏览器中使用该服务,并且调用继续正常。

最佳答案

当我使用 Firebug 进行调试时,我看到 setInterval 停止了。假设这是一个计时/中断的事情,因为只要我不越过断点,它就可以正常工作。

关于JavaScript:什么会导致 setInterval 停止触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604432/

相关文章:

javascript - 如何使用扩展语法将数组传递给 JavaScript 中的方法

c# - 如何使 ModalPopup 拖/放

javascript - Div 的简单功能隐藏/显示/切换

javascript - Infowindow googlemaps点击事件给出错误

php - 无需刷新页面即可获取复选框值

javascript - 使用 AJAX 将 JSON 发送到 PHP

javascript - 如何在没有 jQuery、iframes 或 flash 的情况下为 IE7/8 制作 AJAX 文件 uploader ?

jquery - AjaxSetup从不执行成功函数

javascript - 如何释放网页上的系统资源/CPU使用率?

javascript - 我如何处理带有多个隐藏和显示 div 的下拉列表的父/子 div 问题?