@VadimRublev
Изучаю Go, + фронт (ванильный).

Почему браузер отсылает дополнительный AJAX-запрос на сервер?

Есть форма с двумя полями_ввода.
При нажатии кнопки AJAX-транспортом отправляю POST-запросом на сервер значения из этих полей.
<form>
    <input type="text" name="a" id="idField_1" />
    <br>
    <input type="text" name="b" id="idField_2" />

    <button onclick="sendData()">Тест!</button>
</form>
<script>
    function sendData() {
        let a = document.getElementById("idField_1").value;   // Взято значение поля_1.
        let b = document.getElementById("idField_2").value;   // Взято значение поля_2.
        let xhr = new XMLHttpRequest();   // AJAX-транспорт.
        xhr.open('POST', '/myRout', true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send("a=" + encodeURIComponent(a) + "&b=" + encodeURIComponent(b));   // Отправляем POST-запрос с данными в_строку.
        return;
    }
</script>


Но, помимо POST-данных в теле запроса, появляются данные в URL'е (как GET-запрос).
И на сервер приходят два запроса (либо один запрос два раза). Один из них - с пустыми данными (это тот самый произвольный-браузерный GET-запрос, видимо).
Как избежать двойного запроса на сервер и появления GET-запроса в URL?
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Потому, что внутри обработчика события не блокируется установленный браузером обработчик события submit по умолчанию, который и отправляет форму второй раз. Свой обработчик надо сажать не на click, а на submit (onsubmit), а обработчик по умолчанию отключать так: https://learn.javascript.ru/default-browser-action

А т.к. атрибут method в теге form не установлен, то обработчик по умолчанию отправляет форму методом GET.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽
26 янв. 2021, в 19:29
7000 руб./за проект
26 янв. 2021, в 18:54
2000 руб./за проект