setTimeout变量值未定义

时间:2015-12-10 08:05:34

标签: javascript jquery ajax

我正在实现一种功能,如果用户会话即将在一分钟之前到期,用户将获得弹出窗口。在弹出窗口中有两个按钮“OK”和“Cancel”。如果用户单击“确定”按钮,则向服务器发出AJAX POST调用。 以下是我写的代码 -

        var sessionTimeoutWarning = parseInt(@Session.Timeout - 1);
        var sessionTimeout = @Session.Timeout;
        var sessionWarningTimer = null;
        var sessionExpireTimer = null;

        //For Session Expire Warning Popup
        var sessionWarningTimer = setTimeout('startTimer()', parseInt(sessionTimeoutWarning) * 60 * 1000);

        //For Session Expired Popup
        var sessionExpireTimer = setTimeout('showLogoutModal()', parseInt(@Session.Timeout) * 60 * 1000);

        function showLogoutModal() {
            $("#session-expired-modal").modal('show');
        }

        function startTimer() {
            $("#session-expire-warning-modal").modal('show');

            var count = 60;
            var timer = setInterval(function () {
                $("#seconds-timer").html(count--);
                if (count == -1) {
                    clearInterval(timer);
                    $(".modal-body").html("Your session is expired.");
                }
            }, 1000);
        }

        function executeAjaxCall() {

            $.ajax({
                url: '/Home/SessionTimeout',
                dataType: "json",
                async: false,
                type: "POST"                
            });
        }

        $("#btnOk").click(function () {

            executeAjaxCall();                       

            $("#session-expire-warning-modal").modal('hide');

            alert(sessionWarningTimer);
            alert(sessionExpireTimer);

            if(sessionExpireTimer != null)
            {
                alert("here");
                clearTimeout(sessionExpireTimer);
            }

            //For Session Expire Warning Popup
            var sessionWarningTimer = setTimeout('startTimer()', parseInt(sessionTimeoutWarning) * 60 * 1000);

            //For Session Expired Popup
            var sessionExpireTimer = setTimeout('showLogoutModal()', parseInt(@Session.Timeout) * 60 * 1000);

        });

        $("#btnExpiredOk").click(function () {

            $("#session-expire-warning-modal").modal('hide');
            $("#session-expired-modal").modal('hide');

            window.location = "/Home/Index";
        });

        $("#session-expire-warning-modal").on("hidden.bs.modal", function () {
            $("#session-expire-warning-modal").modal('hide');
        });

        $("#session-expired-modal").on("hidden.bs.modal", function () {
            $("#session-expire-warning-modal").modal('hide');
            $("#session-expired-modal").modal('hide');

            window.location = "/Home/Index";
        });

现在问题是,在制作AJAX之后,sessionWarningTimersessionExpireTimer的值为undefined

1 个答案:

答案 0 :(得分:0)

您要多次重新声明sessionExpireTimersessionWarningTimer。在我看来就像一个范围问题。

我建议您使用"use strict"启动js以防止出现这类问题。

简而言之,请尝试删除按钮上的var关键字点击回调:

//For Session Expire Warning Popup
sessionWarningTimer = setTimeout('startTimer()', parseInt(sessionTimeoutWarning) * 60 * 1000);
//For Session Expired Popup
sessionExpireTimer = setTimeout('showLogoutModal()', parseInt(@Session.Timeout) * 60 * 1000);

因此,您将为先前声明的变量确定值,而不是将它们重新声明为此函数范围