2012-12-06 23 views
1

我在ProjectsController的create()方法,生成一個表單,並使用保存其數據AJAX:如何在同一個動作中處理表單渲染和ajax響應?

class ProjectsController extends AppController 
{  
    public function create() 
    { 
     if ($this->request->is('post')) 
     { 
      $this->Project->create(); 
      $this->request->data['Project']['created_by'] = $this->Auth->user('id'); 
      if ($this->Project->save($this->request->data)) 
      { 
       ... 
      } else { 
       ... 
      } 
     } 

    } 

我怎麼能只傳遞一個成功的消息,如果數據被保存,也使我的形式,如果它不是一個ajax請求?我無法設置autoRender false因爲它必須渲染表單

它是處理jax請求最正確的方法嗎?如果不是,我該怎麼辦?

+0

我會使用post參數來表示請求是ajax。 –

回答

1

檢測AJAX:

您可以使用:

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

做任何你想瓦特/ Ajax和明顯的 '其他' 做休息。

處理它:

大概是這樣的:

if ($this->request->is('ajax')) { 
    //process the ajax response 
    $this->render('/Ajax/json'); 

} else { 
    if($this->request->is('post')) { 
     //process the post 
    } 
    //set variables for the view...etc etc 

} 

另一種選擇 - 獨立的功能:

或者,它也相當普遍只是有兩個不同的動作 - 一個用於ajax,另一個用於其他任何你想要的。這是我喜歡的方式,因爲我寧願沒有if()阻塞。但是 - 對於他們自己的每個人,我都看到他們都經常使用。

public function create_ajax() { ... } 

public function create() { ... } 
+0

非常好的答案! Thx –

+0

Np - 很高興幫助! – Dave