Повторно отправить форму после вызова Ajax возвращает ошибку - PullRequest
0 голосов
/ 17 сентября 2018

Невозможно повторно отправить форму, не щелкнув дважды, когда из моего API возвращается ошибка (например, «неизвестный пользователь»).Я хочу, чтобы пользователь мог повторно отправлять данные, но форма не будет отправлена, если щелкнуть дважды.Первый щелчок удаляет предупреждение об ошибке, а второй щелчок повторно отправляет форму.К вашему сведению: Using jquery.validate.js

var validator = $('#form1').validate({
    submitHandler: function (form) {
        $('#login').attr('disabled', 'disabled');
        $.ajax({
            xhrFields: {withCredentials: true},
            type: "POST",
            dataType: "json",
            data: {
                login: 1,
                UserName: $('#UserName').val(),
                Password: $('#Password').val()
            },
            url: apiBase + 'login.php',
            success: function (resp) {
                window.location.replace("index.php");
            },
            error: function (resp) {
                err = JSON.parse(resp.responseText);
                $('#err').toggleClass('hidden').text(err.alert);
                $('#login').removeAttr('disabled');
            }
        });
    }
});

1 Ответ

0 голосов
/ 18 сентября 2018

Во-первых, чтобы отключить кнопку отправки формы, вы можете использовать

onsubmit: false option of the validator ( $("#form1").validate({
  onsubmit: false
}); )

.Во-вторых, почему вы передаете новый валидатор в переменную validator?В-третьих, функция submitHandler triggers после проверки формы также заменяет кнопку отправки по умолчанию, что заставляет меня думать, что $('#login').attr('disabled', 'disabled'); немного излишне.

Кроме того, в отношениитот факт, что вы дважды нажимаете на кнопку, чтобы заставить ее работать, это может быть случай "слишком большой рекурсии".Пожалуйста, обратитесь к: https://jqueryvalidation.org/documentation/ слишком много рекурсии.

Наконец, я думаю, что вы не должны писать свой собственный вызов ajax, вместо этого используйте функцию $(form).ajaxSubmit(); с опцией callbackобъект для обработки ответов.Пожалуйста, обратитесь к: http://malsup.com/jquery/form/#options-object для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...