Есть ли какой-либо встроенный способ в инфраструктуре Yii, который позволяет отправлять формы AJAX? - PullRequest
3 голосов
/ 08 января 2012

В 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, при отправке формы сначала отправит AJAXPOST-запрос к серверу, а затем сервер вернет сообщения об ошибках (если они есть) в формате JSON, CActiveForm автоматически отобразит сводку ошибок в представлении и заблокирует отправку формы.

Если ошибка не найдена,Затем форма выполнит второй запрос POST (который не является AJAX) и фактически отправит форму.

Но это не то поведение, за которым я следую.

В идеалеЯ хотел бы иметь одиночный AJAX POST-запрос, чтобы при отправке формы сервер возвращал сообщение об успешном завершении или об ошибке и CActiveForm отображал их автоматически.

Это что-то встроенноев в Yii или я должен написать свои собственные коды, делая это?

1 Ответ

4 голосов
/ 08 января 2012

Для выполнения ajax-представления вам нужно заменить обычный CHtml::submitButton() на ajaxSubmitButton().Проверьте это здесь: http://www.yiiframework.com/doc/api/1.1/CHtml#ajaxSubmitButton-detail

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...