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

Как отображать форму в модальном окне при вводе некорректных данных?

Использую Django 4.2.16 и Bootstrap 4.6.2

Что делаю:
При нажатии на кнопку "Войти":
<a id="login" data-url="{% url 'login' %}" data-csrf-token="{{ csrf_token }}" class="nav-link">Войти</a>

скрипт:
$('#login').click(function (event) {
    event.preventDefault();

    let loginUrl = $(this).data('url');
    let csrfToken = $(this).data('csrf-token');

    $.ajax({
        url: loginUrl,
        type: 'GET',
        success: function (response) {
            $('#loginModal .modal-body').html(response);
            $('#loginModal').modal('show');

            $('#loginModal form').submit(function(event) {
                event.preventDefault();

                let formData = $(this).serialize();

                $.ajax({
                    url: loginUrl,
                    type: 'POST',
                    data: formData + '&csrfmiddlewaretoken=' + csrfToken,
                    success: function(response) {
                        if (response.indexOf('alert-danger') === -1) {
                            location.reload();
                        } else {
                            $('#loginModal .modal-body').html(response);
                        }
                    },
                    error: function() {
                        alert('Ошибка при входе в систему.');
                    }
                });
            });
        },
        error: function() {
            alert('Ошибка при загрузке формы.');
        }
    });
});

отправляет запрос на сервер, чтобы получить html-код формы логина, которая выглядит так:
675aab81a479c552912119.jpeg

После этого он перехватывает нажатия на кнопку "Войти", отправляет запрос на сервер, чтобы в случае отправки невалидных данных отобразить ошибку сразу в модальном окне, выглядит так:
675aac0e7b043506924259.jpeg

После этого я снова отправляю форму с невалидными данными.

Что ожидаю:
Модальное окно продолжает отображаться с ошибкой в случае неограниченного количества введений невалидных данных.

Что получаю:
Вся страница переходит по адресу http://127.0.0.1:8000/accounts/login/, отображается одинокая форма без стилей с той же ошибкой:
675aad401c503064618685.jpeg

Подскажите пожалуйста, с чем это может быть связано?
CSRF-токен проверял в devtools, он не меняется.
Странно, что в первый раз всё хорошо, а во второй всё ломается, может есть какие-то отличия в этих событиях, которые я не замечаю?
  • Вопрос задан
  • 37 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@MrColdCoffee
web
Бегло глянул
Получается что если если данные были невалидными, то Вы
success: function(response) {
                        if (response.indexOf('alert-danger') === -1) {
                            location.reload();
                        } else {
                           //Проваливаетесь сюда
                            $('#loginModal .modal-body').html(response);
                          //в response у Вас что?  Форма входа с выведенной ошибкой??
                          //А где обработчик события sabmit "уже новой" формы? Вот и получается что пост выполняется по указанному пути.
                        }
                    },
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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