kdes70
@kdes70
Web developer

Yii2 почему модальное окно отправляет два запроса?

Коллеги помогите с проблемой!
Сценарий бага таков, жму на кнопку которая открывает модальное окно с формой авторизации,
и получается что она сразу отправляет пост запрос, как только заполнил поля даже не нажав на сабмит,
а если поля запомнили какие то значения то сразу получается логинет, я ни че не пойму весть гугл перерыл, не где такого не встретил

вот код:
action controller
public function actionLogin()
    {
        if (Yii::$app->request->isAjax) {
            $model = new LoginForm();
            if ($model->load(Yii::$app->request->post())) {

                if ($model->login()) {
                    return $this->goBack('/pizza');

                } else {

                    Yii::$app->response->format = Response::FORMAT_JSON;
                    return ActiveForm::validate($model);
                }

            }
            return $this->renderAjax('ajax-login', [
                'model' => $model
            ]);
        }


кнопка widget
<a class="hidden-sm" id="modal-login-form" data-target="<?php echo \yii\helpers\Url::to('/user/ajax/login') ?>" title="Авторизация">
                    <span class="glyphicon glyphicon-log-in"></span>  Вход
                </a>
 <?php
    yii\bootstrap\Modal::begin([
        'id' => 'modal',
        'size' => 'modal-md',
    ]);
    ?>
    <div id='modal-content'>Загружаю...</div>
    <?php yii\bootstrap\Modal::end(); ?>


js
$('#modal-login-form').click(function () {
    $('#modal').modal('show')
        .find('#modal-content')
        .load($(this).attr('data-target'));
    return false;
});


сома форма
<div class="login-popup">
            <h1 class="modal-title"><?= Html::encode($this->title) ?></h1>
        <div class="user-default-login">
            <?php $form = ActiveForm::begin([
                'id'                     => 'login-form',
                'enableAjaxValidation'   => true,
                'enableClientValidation' => true,
            ]); ?>

            <?= $form->field($model, 'username')->textInput(['autocomplete' => 'off']) ?>
            <?= $form->field($model, 'password')->passwordInput() ?>
            <?= $form->field($model, 'rememberMe')->checkbox() ?>
            <div style="color:#999;margin:1em 0">
                <?= Html::a(Module::t('module', 'LINK_PASSWORD_RESET'), ['password-reset-request']) ?>.
            </div>
            <div class="form-group">
                <?= Html::submitButton(Module::t('module', 'USER_BUTTON_LOGIN'), ['class' => 'btn btn-ma', 'name' => 'login-button']) ?>
            </div>
            <?php ActiveForm::end(); ?>
        </div>
    </div>
  • Вопрос задан
  • 250 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Я так понимаю виной .load($(this).attr('data-target'))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vism
Какие 2 запроса отправляет, вы не написали.
Вы написали в теле фопроса что отправляет один запрос и сразу логинит.

Сразу логинит, т.к. скорее всего срабатывает событие отправки формы на валидацию, а т.к. экшн один и тот же, оно сразу и логинит.

Все работает так как закодили)
Ответ написан
kdes70
@kdes70 Автор вопроса
Web developer
помогло изменения js
$('#modal-login-form').on('click', function () {
    $.get($(this).attr('data-target'))
        .then(function (response) {
            $('#modal').modal('show')
                .find('#modal-content').html(response);
        });

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

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

Войти через центр авторизации
Похожие вопросы