2012-10-12 65 views
3

我有一個登錄控制器,當用戶有效時,它會重定向到我的索引頁面。重定向工作,但在索引頁面url仍然是驗證方法ex:login/validate_login /。如果我點擊索引頁上的鏈接,然後嘗試回到瀏覽器歷史記錄中,瀏覽器會將我指向驗證方法而不是索引頁。Codeigniter重定向不會使用jQuery移動更新網址

我該如何解決這個問題?

我已經嘗試使用刷新和位置重定向,但都沒有運氣。

我懷疑這是jQuery手機的ajax調用的問題,但我不確定。

任何幫助表示讚賞。 親切的問候

注:我會在索引頁張貼url的圖像,但我不允許,因爲我是一個新用戶。

我的validate方法:

function validate_login($controller='',$method='') { 
    $this->load->library('form_validation'); 
    $this->load->model('workout_model'); 

    $this->form_validation->set_rules('ex_password','Koden','trim|required|min_length[4]|max_length[4]|callback_pw_check'); 


    if($this->form_validation->run() == FALSE) { 
     $this->index(); 
    } else { 
     if($query = $this->workout_model->validate()) { 

      $data = array(
      'is_logged_in' => true, 
      'user_id' => $query->id, 
      'current_exercise' => '1' 
      ); 

      $this->session->set_userdata($data); 

      if($controller=='' || $method=='') { 
       redirect("workout"); 
      } else { 
       redirect($controller."/".$method); 
      } 
     } else { 
      $this->index(); 
     } 
    } 
} 
+0

[This](http://stackoverflow.com/a/12486869/568884)現在可能看起來像是一點點的開銷,但是你稍後會感謝我。 –

+0

非常好的帖子。然而,這只是一個記錄我健身鍛鍊的小應用程序,所以我想我會在其他一些日子嘗試。這個問題很煩人,因爲它是「測試版」版本剩下的唯一東西...... – Attaque

回答

0

有兩種方式來處理這一點,它沒有任何關係與AJAX是CI做事的方式。最快,最簡單的方法是改變

$this->index(); 

redirect(index); 

你這樣做,你實際上並不重定向的方式,你調用哪個是當前URL的指數函數validate_login。這樣做的問題是,如果登錄失敗,它仍然會保留在下一次嘗試的validate_login URL中。

處理它的最好方法是從控制器中的索引函數中調用實際的validate_login函數,而不是表單本身。因此,將表單發送回索引,讓索引控制器檢查表單數據,如果是true,則調用validate_login()。這樣,你永遠不會離開索引頁面,它只是處理登錄表單是否已經提交。解決URL問題。我實際上是通過提交表單進行任何驗證的所有頁面來做到這一點。

+0

感謝您的回覆。我無法得到這個工作..改變$ this-> index();不起作用,也沒有將validate_login()的代碼放入index()中。也許我還不夠清楚。我有兩個控制器一個鍛鍊和其他workout_login。在鍛鍊的構造函數中,我調用一個名爲is_logged_in()的方法,該方法檢查是否設置了userdata。如果不是,我重定向到workout_login控制器。親切的問候 – Attaque

0

兩件事情似乎是必要的URL進行正確更新:不是方法調用使用重定向(...)和禁用jQuery Mobile的AJAX調用。這樣做的兩種方法:添加和屬性到最初指向你的方法鏈接,

<a href='.../validate_login/...' data-ajax='false'>...</a> 

或禁用AJAX通過編輯設置全局調用(未測試)。

相關問題