2012-07-28 73 views
0

我在做下面的代碼錯了嗎?當Ci會話過期時,我似乎無法獲得警報(「成功」)。下面是我的jQuery和詞代碼:jQuery和Ci沒有正確處理註銷功能

setInterval(function() { 
    jQuery.getJSON("<?=base_url()?>index.php/regUserDash/sessionExpire", function(data) { 
     var sessionState = jQuery.parseJSON('{"sessionExpired":"true","sessionExpired":"false"}'); 
     if(sessionState.sessionExpired === "true") { // if session is expired run the following code 
      var dataString = 'true'; 
      jQuery.ajax({ // send the expired signal to Ci so that it knows the session has expired 
       type: 'POST', 
       dataType: 'JSON', 
       url: '<?=base_url()?>index.php/regUserDash/extendSession', 
       data: {'dataString': true}, 
       success: function(data) { 
        if (data.extendedSession == true) { 
         alert('success'); 
        } else { 
         return false; 
        } 
       } 
      }); 
     } else if(sessionState.sessionExpired == "false") { 
      return; 
     } 
    }); 
}, 120000); // loop through every 2 minutes 

笨代碼:

public function sessionExpire() { 
     if ($this->session->userdata("logged") == "1") { 
      echo json_encode(array("sessionExpired" => false)); 
     } elseif($this->session->userdata("logged") == "0") { 
      echo json_encode(array("sessionExpire" => true)); 
     } 
    } public function extendSession() { 
     // set loggedIn session var 
     $this->session->set_userdata('logged', '1'); 
     // return json to ajax call 
     echo json_encode(array("extendedSession" => true)); 
    } 
+0

'VAR的sessionState = jQuery.parseJSON(「{ 」sessionExpired時「:」 true「,」sessionExpired「:」false「}');'這裏可能是其中一個問題.. – 2012-07-28 22:46:57

+0

究竟是什麼? – 2012-07-28 22:47:45

+0

'sessionState.sessionExpired'永遠是'false' – 2012-07-28 22:48:37

回答

2

jQuery.parseJSON('{"sessionExpired":"true","sessionExpired":"false"}');回報第一sessionExpired = true和第二sessionExpired = false,其覆蓋第一。

所以,這裏是要做到這一點(需要測試)的一種方法:

setInterval(function() { 
    jQuery.getJSON("<?=base_url()?>index.php/regUserDash/sessionExpire", function(data) { 
     if(data.sessionExpired == "true") { // if session is expired run the following code 
      // var dataString = 'true'; // Remove this 
      jQuery.ajax({ // send the expired signal to Ci so that it knows the session has expired 
       type: 'POST', 
       dataType: 'JSON', 
       url: '<?=base_url()?>index.php/regUserDash/extendSession', 
       data: {'dataString': true}, 
       success: function(data) { 
        //if (data.extendedSession == true) { 
         alert('success'); 
        //} else { 
        // return false; 
        //} 
        // Remove commented code, because extendSession() always return true 
       } 
      }); 
     } else { 
      return 'Session not expired!'; 
     } 
    }); 
}, 120000); // loop through every 2 minutes 

和CI功能:

public function sessionExpire() 
{ 
    if ($this->session->userdata("logged") == "1") { 
     echo json_encode(array("sessionExpired" => false)); 
    } elseif ($this->session->userdata("logged") == "0") { 
     echo json_encode(array("sessionExpired" => true)); 
    } 
} 

public function extendSession() 
{ 
    // set loggedIn session var 
    $this->session->set_userdata('logged', '1'); 
    // return json to ajax call 
    echo json_encode(array("extendedSession" => true)); 
} 
+0

現在如果返回false,會發生什麼情況?我怎麼知道它何時返回false? – 2012-07-28 23:02:40

+0

你可以有一些提示,但是,你的代碼邏輯是錯誤的。 – 2012-07-28 23:03:45

+0

'extendSession'總是返回'true',這使得不需要代碼的一部分。 – 2012-07-28 23:04:32