Yii框架中是否有任何内置方式支持AJAX表单提交?

Yii框架中是否有任何内置方式支持AJAX表单提交?,ajax,forms,yii,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()->ge

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内置的还是我必须编写自己的代码来完成这项工作?

要执行ajax提交,您需要将通常的
CHtml::submitButton()
替换为
ajaxSubmitButton()
。请点击此处查看:

谢谢您的回复。但是,我希望验证和表单提交能够在一个AJAX POST请求中完成。当然!对不起,我没有认真阅读这个问题。。。现在我明白了。。。实际上,解决方案更简单,但让我将其添加到我的答案中。使用
ajaxSubmitButton()
,当然,这种形式将向服务器发送一个AJAX(而不是非AJAX)POST请求。但是,由于此POST请求不是由CActiveForm发起的,CActiveForm不会在客户端捕获其响应,因此不会自动显示错误或成功消息。+1简单解决方案,@bobo您必须编写自己的代码才能捕获响应。让我知道你是否需要帮助。确保使用“Yii::app()->request->isAjaxRequest”检查请求是否是Ajax请求。