在Yii框架中是否有任何内置方式可以实现AJAX表单提交?

时间:2012-01-08 03:04:10

标签: ajax forms yii

CustomerController中,我有create动作:

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设置为true,但我将客户端选项validateOnSubmit设置为false。

如果我将其设置为true,则在表单提交时,它将首先向服务器发送AJAX POST请求,然后服务器将以JSON格式返回错误消息(如果有),CActiveForm将在视图中自动显示错误摘要并阻止表单提交。

如果没有找到错误,表单将执行第二次 POST请求(非AJAX)并实际提交表单。

但这不是我追求的行为。

理想情况下,我希望有一个单个 AJAX POST请求,这样当表单提交时,服务器将返回成功或错误消息,CActiveForm将自动显示它们。

这是Yii内置的内容还是我必须编写自己的代码呢?

1 个答案:

答案 0 :(得分:4)

要执行ajax提交,您需要将CHtml::submitButton()替换为ajaxSubmitButton()。请在此处查看:http://www.yiiframework.com/doc/api/1.1/CHtml#ajaxSubmitButton-detail