2015-12-10 203 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