2013-10-01 18 views
0

我有這個循環結算時間的jQuery的價值

使用時間間隔爲每3秒

$(window).blur(function() { 
      clearInterval(time); 
      time = setInterval(function() { 
       $.ajax({ 
        url: "@Url.Action("CheckExpiration", "admin")", 
        type: "POST", 
        success: function (data) { 
         if (data == 1) 
         { 
          window.location.href="/admin" 
         } 
        } 
       }); 
      }, 3000); 
     }); 
     $(window).focus(function() { 
      time = setInterval(function() { 
       $.ajax({ 
        url: "@Url.Action("RefreshCookies", "admin")", 
        type: "POST", 
        success: function (data) { 
         if (data == 1) { 
          alert(Expired); 
         } 
        } 
       }); 
      }, 3000); 
     }); 

但每次我模糊的頁面時它似乎有一個矛盾,他們既射擊,而不是一個IM我認爲我清除了模糊事件中的時間..目前正在爲我的應用程序進行登錄,並且我想檢查當該窗口處於非活動狀態時cookie是否已過期,並且會在Cookie過期時自動提示登錄。可以任何人都幫助我? 我認爲這個解決方案是爲了明確TIME的價值如何做到這一點?

+0

你在哪裏宣佈'時間'?這是兩種方法之外的地方嗎? –

+0

我認爲你應該爲兩個事件使用兩個不同的時間處理程序。 – sudhAnsu63

回答

0

我覺得問題是你用setInterval來調用ajax。意思是即使間隔停止也不意味着ajax也會停止,導致它異步工作。那爲什麼當你模糊頁面時不會觸發一個。

爲了解決這個問題,我們需要一個標記來防止在模糊或聚焦頁面時被調用的ajax中的success函數。如果您在最後一次完成後再次調用ajax以減少服務器負載,則更好。所以我們使用loopsetTimeout遞歸技術。

固定見下面的代碼

// flag when is blur 
    var isBlur = false; 

    $(window).blur(function() { 

     isBlur = true; // flaged 

     (function loop() { 
      $.ajax({ 
       url: "@Url.Action("CheckExpiration", "admin")", 
       type: "POST", 
       success: function (data) { 
        if (data == 1 && isBlur) 
        { 
         window.location.href="/admin" 

         // this make sure u call it when the ajax is complete 
         setTimeout(loop, 3000); 
        } 
       } 
      }); 
     })(); 
    }); 

    $(window).focus(function() { 

     isBlur = false; // flaged 

     (function loop() { 
      $.ajax({ 
       url: "@Url.Action("RefreshCookies", "admin")", 
       type: "POST", 
       success: function (data) { 
        if (data == 1 && !isBlur) { 
         alert(Expired); 

         // this make sure u call it when the ajax is complete 
         setTimeout(loop, 3000); 
        } 
       } 
      }); 
     })(); 
    }); 

希望這有助於!