@VadimRublev
Go, front-end (ванильный).

Почему HTTP-AJAX-запрос отправляется два раза?

Почему HTTP-AJAX-запрос отправляется два раза? Форму отправляю без данных.
Кроме того, (если не обновлять страницу) при каждом последующем нажатии кнопки отправки, количество запросов увеличивается на один. При втором нажатии - три запроса уйдут, при третьем - четыре, и т. д.
Ванильный JS и Go-сервер (самописный).
Я догадываюсь, что два раза запрос идёт из-за наличия submit и потом ещё xhr.send()... Но как правильно?

Код мой:
HTML:
<form id="id_Form">
    <button id="id_button" onclick="ClickButton()">Ok</button>
</form>


JS:
function ClickButton() {
    let myForm = document.querySelector('#id_Form');
    myForm.addEventListener('submit', function(event) {
        event.preventDefault();
		
        // Здесь кнопка нажимается только если она активна. В HTML убрал класс, для упрощения.
        if (this.querySelector('#id_button').classList.contains('butt_Activ')) {
            let xhr = new XMLHttpRequest();   // Создан AJAX-транспорт.
            let formData = new FormData(myForm);   // Создан новый Объект-FormData.

            // При завершении запроса:
            xhr.onloadend = function() {
                if (xhr.status === 200) {
                    _ При успешном ответе сервера - вставляем ответ как значение в кнопку. _
                    return;
                } else {
                    _ При ошибке запроса - сообщение об ошибке. _
                    return;
                }
            }

            xhr.open('POST', '/my_form');
            xhr.send(formData);
        }	    
    });
}
  • Вопрос задан
  • 904 просмотра
Пригласить эксперта
Ответы на вопрос 1
@javaScriptIsPooP
Начинающий программист на Python, Веб-дизайнер
Как указал пользователь di, у вас есть событие onclick="" для #id_butt (butt с английского переводится как жопа), которое вызывает функцию от #id_Form, проверяющую нажатие кнопки и именно из-за этого у вас и дважды команда отправляется.
Ответ написан
Ваш ответ на вопрос

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

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