2012-01-08 27 views
3

CustomerController,我有create行動:在Yii框架中是否有任何內置的方式來啓用AJAX表單提交?

public function actionCreate() { 
    $model = new Customer; 

    $this->performAjaxValidation($model, 'customer-form'); 

    //only support ajax saving 
    if (isset($_POST['Customer']) && Yii::app()->getRequest()->getIsAjaxRequest()) { 
       $model->setAttributes($_POST['Customer']); 
       $saveSuccess = $model->save(); 
       if ($saveSuccess) { 
         //should echo a success message              
       } 
       else {        
         //should echo error messages 
       } 

       Yii::app()->end(); 
    } 


    $this->render('create', array('customer' => $model)); 
} 

在視圖中,我使用的CActiveform:

$form = $this->beginWidget('CActiveForm', array(
     'id' => 'customer-form', 
     'enableAjaxValidation' => true, 
     'clientOptions'=>array(
      'validateOnSubmit'=>false   
       ) 
     ) 
); 

正如你所看到的,我設置enableAjaxValidation爲真,但我設置客戶端選項validateOnSubmit爲false。

如果我將其設置爲true,當表單提交,它將第一發送AJAX POST請求發送到服務器,然後服務器將返回錯誤消息(如果有的話)JSON格式,CActiveForm將顯示​​錯誤在視圖中自動摘要並阻止表單提交。

如果沒有發現錯誤,表單將執行 POST請求(這是非AJAX)並實際提交表單。

但這不是我以後的行爲。

理想情況下,我想有一個單個 AJAX POST請求,以便當表單提交時,服務器將返回成功或錯誤消息,CActiveForm將自動顯示它們。

這是Yii內置的東西還是我必須編寫自己的代碼呢?

+1

一定要使用「Yii :: app() - > request-> isAjaxRequest」來檢查請求是否是Ajax請求。 – 2012-01-08 07:07:33

回答

4

要執行ajax提交,您需要用ajaxSubmitButton()替換通常的CHtml::submitButton()。在這裏檢查:http://www.yiiframework.com/doc/api/1.1/CHtml#ajaxSubmitButton-detail

+0

感謝您的回覆。但是,我希望將驗證和表單提交放在單個AJAX POST請求中。 – bobo 2012-01-08 06:01:36

+0

當然!我很抱歉,我沒有仔細閱讀這個問題......現在我看到了......實際上解決方案更加簡單,但讓我將其添加到我的答案中。 – 2012-01-08 06:46:43

+0

當然,使用'ajaxSubmitButton()'的形式,會向服務器發送一個AJAX(而不是非AJAX)的POST請求。但是由於這個POST請求不是由CActiveForm啓動的,CActiveForm不會在客戶端捕獲它的響應,所以不會自動顯示錯誤或成功消息。 – bobo 2012-01-08 17:41:57