Перезагрузка окна при ajax загрузке

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
fenzom
Сообщения: 14
Зарегистрирован: 2019.02.15, 18:36

Перезагрузка окна при ajax загрузке

Сообщение fenzom »

Доброго времени суток. Столкнулся с проблемой: отправляю форму, после чего блок в котором находится форма обновляется при помощи RenderAjax, но после загрузки формы и при нажатии кнопки происходит перезагрузка формы, она больше не валидируется и не отправляется при помощи ajax. Подскажите, пожалуйста, как решить данную проблему?
Код формы/блока:

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

 <div class="card-body text-center">

            <?php $settings = ActiveForm::begin([
                'id' => 'form--categorySettingsGenerate',
                'action' => ['content/category/'],
                'enableAjaxValidation' => true,
                'validationUrl' => ['category-settings-validate'],
            ]);
            ?>

            <div class="row">
                <div class="col-md-3">
                    <?= $settings->field($settings_category, 'start_id_category') ?>
                    <?= $settings->field($settings_category, 'interval_category_id') ?>
                    <?= $settings->field($settings_category, 'category_parent_id') ?>
                </div>
            </div>

            <div class="form-group">
                <?= Html::submitButton(Yii::t('app', 'save_settings'), [
                    'class' => 'btn btn-success',
                    'data' => [
                        'type' => 'form--categorySettingsGenerate',
                        'art' => 'content-ContentCategoryGroups-sdt',
                        'id' => $settings_category->id_content,
                    ],
                    'name' => 'save_settings_category'
                ]) ?>
            </div>


            <?php ActiveForm::end() ?>
        </div>
Код js скрипта:

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

$(document).on('beforeSubmit', '#{$id_form}', function () {

let form = $('#form--categorySettingsGenerate').serialize();

  $.ajax({
        url: '/ajax/',
        type: 'POST',
        data: form,
        beforeSend: function () {
            $('#preloader').show();
        },
        success: function (data) {

            if (typeof data === 'string') {
                let result = JSON.parse(data);
 
                if (result !== null) {

                    if (typeof result.func !== "undefined" && result.func !== null) {

                        obj[result.func](result.value, result.options);
                    }
                }
            }
        },
        complete: function () {
            $('#preloader').hide();
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(jqXHR.responseText);
            console.log(textStatus);
            console.log(errorThrown);
        }
    });
    return false;


});
Функция обновления формы

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

    public static function getOutputUpdatedData()
    {
        $settings_category = ContentCategoryGroups::getOne();

        if (!$settings_category) {

            $settings_category = new ContentCategoryGroups();
        }

        return [
            'nameId' => 'settings-category',
            'data' =>
                Yii::$app->view->renderAjax("@app/views/content/category/content_category_settings",
                    compact('settings_category')
                ),
        ];
    }
von.hamster
Сообщения: 69
Зарегистрирован: 2013.06.06, 16:07

Re: Перезагрузка окна при ajax загрузке

Сообщение von.hamster »

js в каком месте подгружается?

И еще момент (теоретический, описал в соседней теме) - renderAjax подгружает не только скрипты, а еще ассеты. И, если уже загружен, какой-то скрипт - при повторной загрузке он может конфликтовать с тем, что уже на странице. Либо переинициализировать его.

Раньше я с похожим сталкивался, когда подгружались 2 разные версии jquery.
fenzom
Сообщения: 14
Зарегистрирован: 2019.02.15, 18:36

Re: Перезагрузка окна при ajax загрузке

Сообщение fenzom »

js подгружаю в AppAsset. По поводу возможных конфликтов, спасибо за подсказку, проверю.
Ответить