Задать вопрос
@n199a
Java

Почему не отправляется POST запрос с помощью XMLHttpRequest?

Тестирую локально на 127.0.0.1:3000.

Имеется скрипт, получающий значение поля input по событию onkeyup и с помощью XMLHttpRequest значение отправляется со стороны клиента на сторону сервера NodeJS:

<script>
    function search() {
        let method = 'POST';
        let url = new URL("/");

        let searchValue = document.getElementById('search').value;
        console.log('[' + url.href + '] searchValue:' + searchValue);

        let searchRequest = new XMLHttpRequest();
        searchRequest.open(method, url);
        searchRequest.send({searchQuery: searchValue});
    }
</script>


Согласно скрипту, POST запрос отправляется на корневой адрес let url = new URL("/");, который обрабатывается на сервере таким образом:

const express = require('express');
const bodyParser = require('body-parser');

const urlencodedParser = bodyParser.urlencoded({ extended: false});
const jsonParser = bodyParser.json();

app.use(jsonParser);
app.use(urlencodedParser);

// some code ....

exports.index = function (request, response) {
    let giftCertificates;
    let searchValueFromPage = JSON.stringify(request.body.searchQuery);

    // if the user entered search request, then the event "onkeyup" will run
    if(searchValueFromPage) {
        giftCertificates = search(searchValueFromPage, content);
    } else {
        giftCertificates = content;
    }

    response.render('index.hbs', {
        title: 'Gifts main page',
        text: 'This is the left box',
        gifts: giftCertificates
    });
}


Но в консоли получается ошибка:
Uncaught TypeError: URL constructor: / is not a valid URL.


Если вместо let url = new URL("/"); я пропишу let url = new URL(window.location.href);, что будет равно http://127.0.0.1:3000/, то после ввода мной значение в input, запрос не попадает на сервер по пути http://127.0.0.1:3000/, почему?
  • Вопрос задан
  • 345 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@n199a Автор вопроса
Java
Разобрался, у меня на сервере была настроена обработка только GET запроса, добавил и для POST:
indexRouter.get('/', indexController.index);
indexRouter.post('/', indexController.index);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
wapster92
@wapster92 Куратор тега JavaScript
let url = new URL(window.location.href);, что будет равно 127.0.0.1:3000

неверно

let url = new URL('http://' + window.location.host)

И даже это не равно строке с адресом. Вообще зачем ты используешь new Url, когда от тебя ожидается всего навсего строка с url в твооем случае это просто 'http://' + window.location.host
Ответ написан
Ваш ответ на вопрос

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

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