2015-12-10 170 views
0

我正在实现一个功能,用户在用户会话即将过去一分钟之前将会弹出一个弹出窗口。在弹出窗口中有两个按钮“确定”和“取消”。如果用户点击“确定”按钮,则向服务器发出AJAX POST调用。 下面是我写的代码 -setTimeout变量值未定义

 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

请检查@ Session.Timeout获取价值? –

+0

您在何处编写此代码?在JS文件或cshtml(剃须刀)? –

+0

这段代码如何写入JS文件?当然这是在共享布局视图 – JJoe123

回答

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); 

所以你会assingning值以前声明的增值经销商,而不是重新宣告他们进入该功能范围

+1

你的意思是范围?或者是舀一些新的酷编程 - 行话我还没有听说过? :) –

+0

事实上是一种错字类型太早 – Edorka

+0

对不起@ adam-azad我必须回滚,因为我做了一些更改丢失 – Edorka