@YasyaK

Почему при POST запросе через fetch не передаются кириллические данные?

Клиент:
let userName = 'Yana';
    let text = "text";

    fetch('/chat', {
        headers: {
            "Content-type": "application/x-www-form-urlencoded; charset=UTF-8",
            'body': [text, userName],
            'Content-Type': 'application/json'
        },
        method: 'POST',
    })

На сервере:
router.post('/',function(req,res){
  console.log('post!!!', req.headers.body);
  res.status(200).send();
});


При запуске сервер вообще не реагирует, а в консоли браузерной вот что: "chatScript.js:14 Uncaught (in promise) TypeError: Failed to execute 'fetch' on 'Window': Value is not a valid ByteString.
at HTMLSpanElement.buttonSendMe.onclick (chatScript.js:14)".

Тут ("HTMLSpanElement.buttonSendMe.onclick") элемент, при нажатии на который в скрипт отправляется текстовая строка.

Если в text и userName латинский текст, то всё ок...

Что делать? Как решить?
  • Вопрос задан
  • 4938 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rapt0p7
@Rapt0p7
FrontEnd developer in Eastwood
Поправьте headers, два Content-Type с разным кавычками и типами передаваемых данных говорит о том что вы это откуда то скопировали, да к тому же body запихали туда в виде массива.
Вот кусок работающего кода для post запроса (и не только):
if (type.toLowerCase() === 'post') {
    params = JSON.stringify(params);
  }

  const fetchOptions = {
    method: type,
    mode: REQUEST_API.mode,
    headers: new Headers({
      Accept: 'application/json',
      'Content-Type': 'application/json'
    }),
    credentials: REQUEST_API.credentials,
    body: params
  };

return fetch(url, fetchOptions);

params в случае post запроса будет объектом с телом запроса.

На случай если не поможет рекомендуется к ознакомлению формы и кодировка, использование fetch
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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