Задать вопрос

GetFlash + submit Yii2 по ajax?

Доброго дня. Изучаю Yii2 и затронул реализацию такой вещи как - комментарии.
Комментарии добавляются по нажатию кнопки "отправить", уходят в админку, где одобряются и постятся.
Идея такая, что при добавлении комментария, вылетает уведомление пользователя, что комментарий на проверке, очищается поле ввода текста и все довольны. Сейчас удалось реализовать отправку комментария в админку только через обновление страницы. Хотелось бы сделать по ajax.

Код для комментария -
<?php if(!Yii::$app->user->isGuest):?>
        <div class="leave-comment">
            <?php if(Yii::$app->session->getFlash('comment')):?>
                <div class="alert alert-success" role="alert">
                    <?= Yii::$app->session->getFlash('comment'); ?>
                </div>
            <?php endif;?>

            <?php $form = \yii\widgets\ActiveForm::begin([
                'action'=>['site/comment', 'id'=>$article->id],
                'options'=>['class'=>'form-horizontal contact-form', 'role'=>'form']])?>

            <div class="form-group">
                <div class="col-md-12" style="padding: 0;">
                    <?= $form->field($commentForm, 'comment')->textarea(['class'=>'form-control comment-form', 'placeholder'=>'Ваше сообщение'])->label(false)?>
                </div>
            </div>

            <button type="submit" class="btn send-btn">Отправить</button>
            <?php \yii\widgets\ActiveForm::end();?>

        </div>
    <?php endif;?>
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@topalek
$this->registerJs(
        <<<JS
    
    $('form').on('beforeSubmit',function(event) {
        var yiiForm = $(this);    
        yiiForm.find('.has-error').removeClass('has-error');
        yiiForm.find('.help-block').html('');
        
        $.ajax({
            url: yiiForm.attr('action'),
            type: 'post',
            data: yiiForm.serialize(),
            success: function(result) {
                if(result.errors) {
                     jQuery.each(result.errors, function(id, error) {
                         $('.field-' + id).addClass('has-error').find('.help-block').html(error);
                     });
                }
                
                if(result.status == true){
                    // show message
                }
            } 
        });
        
        return false;

    });
JS
    );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы