Задать вопрос
@VadimRublev
Go, front-end (ванильный).

Почему браузер отсылает дополнительный 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?
  • Вопрос задан
  • 73 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Потому, что внутри обработчика события не блокируется установленный браузером обработчик события submit по умолчанию, который и отправляет форму второй раз. Свой обработчик надо сажать не на click, а на submit (onsubmit), а обработчик по умолчанию отключать так: https://learn.javascript.ru/default-browser-action

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

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

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