Yii Framework Forum: Вопрос По Cactiveform - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Вопрос По Cactiveform Как узнать, прошли данные валидацию или нет Rate Topic: -----

#1 User is offline   Pasta 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 11-February 13

Posted 26 April 2013 - 09:42 AM

Есть CActiveForm. Надо узнать, прошли ли данные валидацию, или нет. Валидация проходит на сервере и аяксом отдается клиенту.

Надо то, что пришло в ответе, вставить в див, если данные прошли валидацию.

Проблема в том, что если ставить ajaxSubmitButton, то при нажатии кнопки данные не будут валидироваться и любой ответ перезаписывает див .form-add-coupon, а если поставить submitButton, то невозможно понять, что данные сохранены, т.к. обработчик повесть нельзя.

Форма
                    <?php $form=$this->beginWidget('CActiveForm', array(
                            'action'=>Yii::app()->createUrl('save'),
                            'id'=>'kupon-form',
                            'enableAjaxValidation'=>true,
                            'clientOptions'=>array(
                                    'validateOnSubmit'=>true,
                                    'hideErrorMessage'=>true,
                                    'validationDelay'=>1000
                            ),
                            'htmlOptions'=>array('class'=>'edit-form',
                                                 'enctype'=>'multipart/form-data')
                    )); ?>



Копки
<?php echo CHtml::ajaxSubmitButton('Добавить', Yii::app()->createUrl('save'), array('update' => '.form-add-coupon'), array('class'=>'submit')); ?>


<?php echo CHtml::submitButton('Добавить', array('class'=>'submit')); ?>

0

#2 User is offline   tuschkan 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 122
  • Joined: 20-April 11
  • Location:Kiev, Ukraine

Posted 26 April 2013 - 03:00 PM

Используйте

        'clientOptions'=>array(
            'validateOnSubmit'=>true,
            'afterValidate'=>'js:afterFormValidateFunction',     
        ),


    function afterFormValidateFunction(form, data, hasError){
        if (!hasError){
            $.post(form.attr('action'), form.serialize(), function(data){
                if (data)
                //do smth here
            });
        }
        // Always return false so that Yii will never do a traditional form submit
        return false;
    } 

0

#3 User is offline   Pasta 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 11-February 13

Posted 27 April 2013 - 06:58 AM

Этот код срабатывает только если данные не прошли валидацию. Если все норм, и данные ушли, то 0 реакции.

                    <?php $form=$this->beginWidget('CActiveForm', array(
                            'action'=>Yii::app()->createUrl('save'),
                            'id'=>'kupon-form',
                            'enableAjaxValidation'=>true,
                            'clientOptions'=>array(
                                    'validateOnSubmit'=>true,
                                    'hideErrorMessage'=>true,
                                    'afterValidate'=>'js:afterFormValidateFunction', 
                            ),
                            'htmlOptions'=>array('class'=>'edit-form',
                                                 'enctype'=>'multipart/form-data')
                    )); ?>


function afterFormValidateFunction(form, data, hasError) {
    alert('afterValidate');
    console.log('data');
    
    if (!hasError) {
        $.post(form.attr('action'), form.serialize(), function(data) {
            if (data) {
                 console.log(data);
            }
        });
    }
    // Always return false so that Yii will never do a traditional form submit
    return false;
} 


Есть идея разделить методы для валидации и сохранения, но тогда надо хотя бы заставить эту функцию работать.
0

#4 User is offline   tuschkan 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 122
  • Joined: 20-April 11
  • Location:Kiev, Ukraine

Posted 27 April 2013 - 07:04 AM

Какая должна быть реакция, если данные ушли?

Тут данные уходят на сервер
        $.post(form.attr('action'), form.serialize(), function(data) {
            if (data) {
                 console.log(data);
            }


а тут обрабатывайте результата запроса к серверу.

            if (data) {
                 console.log(data);


Верните success, если на сервер все получилось. Например, проверяйте, если if(data.success)...
0

#5 User is offline   Pasta 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 11-February 13

Posted 27 April 2013 - 07:10 AM

Реакция это alert('afterValidate') или console.log('data'), которые я поставил в начале функции, а так как их нет, то я даже не знаю что делать.
Ошибок нет тоже
0

#6 User is offline   Pasta 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 11-February 13

Posted 27 April 2013 - 11:05 AM

Разобрался.
Ошибка была в том, что я валидировал и сохранял данные по одному и тому же урлу, в одном и том же методе.
Т.е. мой ответ, который я возвращал при успешном сохранении просто не распознавался юи-формой и считался всё равно заваленной валидацией.
Когда я стал возвращять при прохождении валидации пустую строку, код
'afterValidate'=>'js:afterFormValidateFunction

заработал.

В общем, решение разделить валидацию и сохранение на отдельные методы - верно.

В итоге сделал через стандартный метод performAjaxValidation(), и как я сразу не догадался..
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users