Параметры тела запроса на выборку JavaScript не получены

Контекст: я пытаюсь отправить запрос на размещение на сервер с помощью JavaScript и получить данные из html-файла, который я пишу.

Проблема. Сделанный мной запрос работает в Insomnia, но когда я пытаюсь отправить его из HTML-файла, он не принимается должным образом. Код также был сгенерирован Insomnia. Когда я отправляю его из html, запрос отправляется, и я получаю ответ «ОК», но сервер не выполняет задачу в запросе, что заставляет меня поверить, что он не был получен или я что-то пропустил. При попытке отправить запрос консоль показывает ответ, который говорит "ok", 200 и т.д., но также имеет часть "bodyUsed: false".

Функция, созданная Insomnia:

fetch("url", {
  "method": "PUT",
  "headers": {
    "content-type": "application/x-www-form-urlencoded"
  },
  "body": {
    "name": "name",
    "desc": "description"
  }
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.log(err);
});

Вопрос(ы): Что-то не так с кодом? Как сервер получает запрос, но не тело? Означает ли сообщение «bodyUsed: false», что тело запроса по какой-то причине было проигнорировано? Может во всем виноват сервер?

Отказ от ответственности: я немного новичок в веб-разработке, поэтому простите меня, если я упустил какой-то очевидный момент.


person vajnaivik    schedule 23.11.2019    source источник


Ответы (2)


Если вы сохраняете "content-type": "application/x-www-form-urlencoded" и ваш сервер настроен таким образом, вы должны отправлять свои данные, используя FormData следующим образом:

var formData = new FormData(); 
formData.append('name', 'Chris');
formData.append('descr', 'description');

fetch("url", {
  "method": "PUT",
  "headers": {
    "content-type": "application/x-www-form-urlencoded"
  },
  "body": formData
})
.then(response => {
  console.log(response);
})
.catch(err => {
  console.log(err);
});
person Michalis Garganourakis    schedule 23.11.2019
comment
Спасибо за ответ, но проблема осталась. - person vajnaivik; 26.11.2019

попробуй это

let formData = new FormData();

formData.append('name', 'name value');
formData.append('desc', 'description value');

fetch('url', {
    method: 'POST',
    credentials: 'same-origin',
    body: formData
}).then(rawResponse => rawResponse.json())// or rawResponse.text() to get simple string
        .catch(error => {
            console.log(error);
        })
        .then(response => {
            console.log(response);
        });
person Angel    schedule 23.11.2019
comment
Я не думаю, что мне нужны учетные данные, но я проверил, и результаты были такими же. Также: браузер выдает ошибку без заголовка. Я пытался использовать formData, но, к сожалению, это не помогло. - person vajnaivik; 26.11.2019
comment
credentials: 'same-origin' Раньше я получал куки с сервера, иначе клиент их игнорирует. Правда в том, что я копирую и вставляю код из приложения, поэтому я удостоверяюсь, что он работает, возможно, я игнорирую то, что вы использовали метод PUT, а не метод POST. - person Angel; 27.11.2019