Как отправлять две формы поочередно посредством ajax

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
makeloo86
Сообщения: 55
Зарегистрирован: 2016.09.07, 12:35

Как отправлять две формы поочередно посредством ajax

Сообщение makeloo86 »

Здравствуйте! На странице есть две формы. Первая форма выглядит так:

Код: Выделить всё

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data'], 'action'=> Url::to(['/order/sendone'])]); ?>
                   
 <?php echo $form->field($ogModel, 'content')->textarea(['rows' => 6,'placeholder'=>Yii::t('app','Write a message')])->label('') ?>
                                            
<?= Html::submitButton( Yii::t('app', 'Send'), ['class' => 'btn btn-success','id'=>'applymessage']) ?>
                    
<?php ActiveForm::end(); ?>
Вторая форма так:

Код: Выделить всё

<?php $form = ActiveForm::begin(['action'=> '/order/sendtwo']); ?>

<?= $form->field($ogModel, 'customer_name')->textInput(['maxlength' => true,'placeholder'=>Yii::t('app','Customer name')])->label('') ?>

<?= $form->field($ogModel, 'phone')->textInput(['maxlength' => true,'placeholder'=>Yii::t('app','Phone number')])->label('') ?>

<?= Html::submitButton($ogModel->isNewRecord ? Yii::t('app', 'Send message') : Yii::t('app', 'Update'), ['class' => $ogModel->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>

<?php ActiveForm::end(); ?>
С помощью ajax нужно отправить на обработку сначало одну форму, потом другую.
Раньше когда была только одна форма работал такой код:

Код: Выделить всё

    $('body').on('beforeSubmit', 'form#w0', function () {
//        e.preventDefault();
        var form = $(this);
        // return false if form still have some validation errors
        if (form.find('.has-error').length) {
            return false;
        }
        // submit form
        $.ajax({
            url: form.attr('action'),
            type: 'post',
            data: form.serialize(),
            success: function (response) {
                if(response){
                    console.log(response);
                    //$('#oneform').addClass('inv');
                    $('#twoform').addClass('inv');
                    $('#threeBlock').removeClass('inv');
                } else {
                    $('#errorsdiv').html('<p><?= Yii::t('app','Send form failed') ?></p>');
                }
            }
        });
        return false;
    });
Теперь когда две формы, попытался отслеживать клик по сабмиту. Но этот код не работает:

Код: Выделить всё

    $(document).ready(function(){
        $('#applymessage').on('click',function(e){
            e.preventDefault();
            var form = $(this);
            $.ajax({
                url: form.attr('action'),
                type: 'post',
                data: form.serialize(),
                success: function (response) {
                    if(response){
                        console.log(response);
                        $('#oneform').addClass('inv');
                        $('#twoform').removeClass('inv');
                    } 
                }
            });
            return false;
        });
    }
Я так понял что все же по клику надо отслеживать. В интернете не нашел подходящего решения. Подскажите пожалуйста как правильно сделать раздельную отправку этих двух форм на ajax?
andrei.obuhovski
Сообщения: 610
Зарегистрирован: 2015.07.16, 10:50

Re: Как отправлять две формы поочередно посредством ajax

Сообщение andrei.obuhovski »

makeloo86 писал(а): Раньше когда была только одна форма работал такой код:

Код: Выделить всё

    $('body').on('beforeSubmit', 'form#w0', function () {
//        e.preventDefault();
        var form = $(this);
        // return false if form still have some validation errors
        if (form.find('.has-error').length) {
            return false;
        }
        // submit form
        $.ajax({
            url: form.attr('action'),
            type: 'post',
            data: form.serialize(),
            success: function (response) {
                if(response){
                    console.log(response);
                    //$('#oneform').addClass('inv');
                    $('#twoform').addClass('inv');
                    $('#threeBlock').removeClass('inv');
                } else {
                    $('#errorsdiv').html('<p><?= Yii::t('app','Send form failed') ?></p>');
                }
            }
        });
        return false;
    });
С двумя тоже должен работать. Попробуйте добавить айдишники каждой форме, и по ним ссылаться.
makeloo86
Сообщения: 55
Зарегистрирован: 2016.09.07, 12:35

Re: Как отправлять две формы поочередно посредством ajax

Сообщение makeloo86 »

Да. Я два раза скопировал. Этот код. Работает. Выглядит так. Но пхпшторм ругается на дубликат селекторов боди. Получется пхпшторм зря ругается чтоли?)))

Код: Выделить всё

    $('body').on('beforeSubmit', 'form#w0', function () {
        var form = $(this);
        // return false if form still have some validation errors
        if (form.find('.has-error').length) {
            return false;
        }

        $.ajax({
            url: form.attr('action'),
            type: 'post',
            data: form.serialize(),
            success: function (response) {
                console.log(form);
                if(response){
                    $('#oneform').addClass('inv');
                    $('#twoform').removeClass('inv');
                } else {
                    $('#errorsdiv').html('<p><?= Yii::t('app','Send form failed') ?></p>');
                }
            }
        });
        return false;
    });

    $('body').on('beforeSubmit', 'form#w1', function () {
        var form = $(this);
        if (form.find('.has-error').length) {
            return false;
        }
        // submit form
        $.ajax({
            url: form.attr('action'),
            type: 'post',
            data: form.serialize(),
            success: function (response) {
                console.log(response);
            }
        });
        return false;
    });
andrei.obuhovski
Сообщения: 610
Зарегистрирован: 2015.07.16, 10:50

Re: Как отправлять две формы поочередно посредством ajax

Сообщение andrei.obuhovski »

Он ругается на то что вы к дому неэффективно обращаетесь.
makeloo86
Сообщения: 55
Зарегистрирован: 2016.09.07, 12:35

Re: Как отправлять две формы поочередно посредством ajax

Сообщение makeloo86 »

andrei.obuhovski писал(а):Он ругается на то что вы к дому неэффективно обращаетесь.
Как понять к дому? извините со сленгом программистов не очень знаком ;)
Ответить