【问题标题】:Is there any built-in way in Yii framework that enables AJAX form submission?Yii 框架中是否有任何内置方式可以实现 AJAX 表单提交?
【发布时间】:2012-02-05 04:46:44
【问题描述】:

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 的内置功能还是我必须自己编写代码才能做到这一点?

【问题讨论】:

  • 请务必使用“Yii::app()->request->isAjaxRequest”来检查请求是否为 Ajax 请求。

标签: ajax forms yii


【解决方案1】:

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

【讨论】:

  • 感谢您的回复。但是,我希望验证和表单提交在单个 AJAX POST 请求中。
  • 当然!对不起,我没有仔细阅读这个问题......现在我明白了......实际上解决方案更简单,但让我将它添加到我的答案中。
  • 使用ajaxSubmitButton(),表单当然会向服务器发送一个AJAX(而不是非AJAX)POST请求。但是由于这个 POST 请求不是由 CActiveForm 发起的,所以 CActiveForm 不会在客户端捕捉到它的响应,所以不会自动显示错误或成功信息。
  • +1 简单的解决方案,@bobo 您必须编写自己的代码才能捕获响应。让我知道你是否需要帮助。
猜你喜欢
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 2020-09-13
  • 2010-11-21
  • 1970-01-01
相关资源
最近更新 更多