2011-12-23 91 views
0

我有以下的方法,其允許用戶登錄到我的申請:CakePHP的2.0的Ajax登錄

public function login() 
{ 
    if($this->Auth->user()) 
    { 
     $this->Session->setFlash(__('Already logged in...'), 'default', array(), 'auth'); 

     $this->redirect(array('controller'=>'pages','action'=>'display','home')); 
    } 

    if ($this->request->is('ajax')) 
    { 
     $this->layout = 'ajax'; 

     if ($this->Auth->login()) 
     { 

     } 
     else 
     { 

     } 
    } 
    else if ($this->request->is('post')) 
    { 
     if ($this->Auth->login()) 
     { 
      return $this->redirect($this->Auth->redirect()); 
     } 
     else 
     { 
      $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth'); 
     } 
    } 
} 

它允許用戶使用任一POST請求或通過Ajax請求登錄。然而,關於ajax請求,我如何使用JSON傳回結果?因此,例如,如果用戶輸入錯誤的細節傳回錯誤消息?

我已經設置了jQuery AJAX,所以我只需要在成功方法中做一些額外的邏輯來處理返回,它將顯示來自服務器的錯誤消息或基於返回服務器。

例如

$('form').live('submit', function (event) { 

    // Declare the form 
    var form = $(this); 

    // Stop the form from doing a native postback 
    event.preventDefault(); 

    // Get the data from the form 
    var data = form.serialize(); 

    $.ajax({ 
     type: form.attr('method'), 
     url: form.attr('action'), 
     data: data, 
     success: function (responseHtml) { 

      // If correct login details 
      if(success){ 
       window.location.href('INSERT LOCATION TO REDIRECT TO FROM SERVER'); 
      } else {   
       alert('INSERT MESSAGE FROM THE SERVER'); 
      } 

     }, 
     error: function (jqXHR, textStatus, errorThrown) { 

       alert('Error!'); 

     } 

    }); 

}); 

任何人都可以幫忙嗎?我正在使用CakePHP 2.0,並且我在網絡上看到的所有教程都已經過時,或者因爲我試圖實現的目標而太冗長。

回答

0

編輯:您需要使用下面的PHP代碼

if ($this->Auth->login()) 
    { 
     $arr = array("login" => "true" , "redirect" => "/redirect_url"); 
     echo json_encode($arr); 
    } 
    else 
    { 
     $arr = array("login" => "false" , "error" => "Invalid Login Credentials"); 
     echo json_encode($arr); 
    } 

你需要修改你的JavaScript來處理使用JSON jQuery.getJSON值的JavaScript的一面。例如jQuery.getJSON在這裏被http://api.jquery.com/jQuery.getJSON/

使用此jQuery代碼

<script type="text/javascript"> 


    $.getJSON("login.php", function(data) { 
        if(data.login) 
        { 
         //redirect user with data.redirect 
        } 
        else 
        { 
         //display error with data.error 
        } 
    }) 


</script> 
+0

這是不是很靈活速效,它不是回傳重定向鏈接。因此,爲什麼我想使用JSON,所以我可以傳遞多個變量。 – Cameron 2011-12-23 21:31:56

+0

你可以在php中使用數組,然後使用json_encode($ array)將數組轉換爲json – 2011-12-23 21:36:19

+0

小心地顯示一個例子嗎?然後,我將如何在JavaScript成功調用中使用它來決定它是否是錯誤,然後執行相關操作。 – Cameron 2011-12-23 22:07:51