2013-07-14 25 views
2

所以這裏CakePHP的登錄功能的情況:爲Ajax調用

我用的js幫助創造CakePHP的AJAX登錄表單,這是擺在我看來:

<?php 
$data = $this->Js->get('#UserLoginForm')->serializeForm(array('isForm' => true, 'inline' => true)); 
     $this->Js->get('#UserLoginForm')->event(
     'submit', 
     $this->Js->request(
      array ('controller' => 'users', 'action' => 'login'), 
      array (
        'update' => '#messagediv', 
        'before' => '$("#loading").fadeIn()', 
        'complete' => '$("#loading").fadeOut()', 
        'data' => $data, 
        'async' => true,  
        'dataExpression'=>true, 
        'method' => 'POST', 
       ) 
     ) 
    ); 
?> 

然後在下面這個我已列入我的形式和下面的表格,我有:

<?php echo $this->Form->create('User'); 
echo $this->Form->input('username'); 
echo $this->Form->input('password'); 
echo $this->Form->end('submit); 
?> 


<?php echo $this->Js->writeBuffer(); ?> 

現在我不知道如何使正常功能的控制器檢查登錄,如果全成或顯示錯誤,如果沒有重定向..

我能夠做出檢查登錄和echo 1如果登錄deatils是正確的,如果沒有,但每當我嘗試使用控制器功能重定向它只是在DIV #messagediv加載「整個登錄頁面」回聲0的東西。 ..

這是我的控制器動作現在的樣子:

public function login() { 
    if ($this->request->isAjax()) { 
     $this->layout = 'ajax'; 

     if ($this->Auth->login()) { 
     $this->Session->setFlash('Login Successfull'); 
     } else { 
     $this->Session->setFlash('Login Incorrect'); 
     } 

    } 
    } 

誰能告訴我什麼,我做錯了什麼?

因此,如何登錄全成和如何輸出錯誤信息後重定向到#messagediv如果錯誤的用戶名或密碼?

回答

1

如果我理解你正在試圖做的(只加載提示信息,而不是整個頁面)正確的東西,改變你的操作是這樣的:

public function login() { 
    if ($this->request->isAjax()) { 
     $this->layout = 'ajax'; 

     if ($this->Auth->login()) { 
      $this->Session->setFlash('Login Successfull'); 
      $this->redirect('wherever'); 
     } else { 
      $this->Session->setFlash('Login Incorrect'); 
      $this->render('messagediv'); 
     }  
    } 
} 

然後創建在查看/用戶視圖/ messagediv.ctp,只包含echo $this->Session->flash();

可能有其他方法可能會更好,但我不確定取決於您的確切用途。這應該可以解決你想要做的事情(如果我沒有弄錯的話)。

+0

這工作,但其實我還有一個問題,我用使用json_encode從PHP $響應不同的方法=結果等,然後進行它查看,並考慮在根據結果阿賈克斯成功的一部分返回我使用重定向和其他的東西..你能告訴我是做這種事情的好方法嗎? –

+0

我不確定我是否完全理解,這可能取決於您是如何實現它的。您應該提出一個新問題 - 可以回答我是否可以看到您使用的代碼。 – SharkofMirkwood

+0

看到你的編輯後,我想我更瞭解。是啊,這應該是登錄(){這裏json_encode正登錄做的好方法:) – SharkofMirkwood

0

嘗試增加RequestHandler到$組件陣列。

var $components = array("RequestHandler");