JavaScript计时器无法正常工作

时间:2014-07-26 14:23:35

标签: javascript jquery asp.net-mvc

我创建了一个名为ExtremeNotifications.js的文件,并添加到_Layout.cshtml主版面。

ExtremeNotifications.js包含以下JavaScript代码:

var extremeNotifications = extremeNotifications || {};

extremeNotifications = (function () {

    var baseURL = document.baseURI;
    var url = baseURL + 'api/usernotifications';
    var isNotificationServiceStarted = false;
    var timer;

    function getPendingNotifications() {
        $.ajax({ url: url, success: dataRetrieved, type: 'GET', dataType: 'json' });
    }

    function dataRetrieved(data) {
        alert(data);
    }

    function startNotifications() {
        if (!isNotificationServiceStarted) {
            timer = setInterval(getPendingNotifications, 3000);
            isNotificationServiceStarted = true;
        }
    }

    function stopNotifications() {
        clearInterval(timer);
        isNotificationServiceStarted = false;
    }

    return {
        start: startNotifications(),
        getPendingNotifications: getPendingNotifications(),
        isNotificationServiceStarted: isNotificationServiceStarted,
        stop: stopNotifications()
    }
})();

然后在我的主页Index.cshtml中,我使用以下代码启动通知,并且仅在User.Identity.IsAuthenticated时启动:

<script>
   extremeNotifications.start();
</script>

所以现在当我的页面启动并且我是经过身份验证的用户时,我第一次收到警报框但是3秒后我再也看不到其他警报。

有任何意见吗?

1 个答案:

答案 0 :(得分:2)

您已关闭,但您正在错误地创建返回的对象:

return {
    start: startNotifications,
    getPendingNotifications: getPendingNotifications,
    isNotificationServiceStarted: isNotificationServiceStarted,
    stop: stopNotifications
};

通过在函数名后面加(),你的代码调用函数并返回它们的返回值,而不是返回对函数本身的引用。