Я пытаюсь POST через API, но Axios.post продолжает давать сбой, а XHR работает. Я знаю, что мне нужно установить заголовки запроса с UTF-8, но, похоже, Axios не распознает его.
Я знаю, что мне нужно установить 'application/x-www-form-urlencoded; charset=UTF-8' в моем заголовке запрос для этого API был сделан во Flask, и владелец не настроил эту его часть. (И потому что он работает с XHR).
Работающий код:
const post = (url, params) => {
const http = new XMLHttpRequest();
http.open("POST", url, true);
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
http.onreadystatechange = () => {
if (http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(params);
};
Поэтому я погуглил, чтобы узнать, как перевести #setRequestHeader в Axios.post(), и нашел эти ссылки: https://github.com/axios/axios/issues/858 и https://github.com/axios/axios/issues/827.
Затем я попробовал что-то вроде этого:
const headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
const post = ({ data, endpoint }) => axios
.post(endpoint, data, { headers })
.then(request => request.data);
Этот:
const headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
const post = ({ data, endpoint }) => axios
.post(endpoint, data, headers)
.then(request => request.data);
И это:
const headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
const post = ({ data, endpoint }) => axios({
method: "post",
url: endpoint,
data,
headers
}).then(request => request.data);
Но каждый из них терпел неудачу с ошибкой 400. Итак, как мне перевести http.setRequestHeader() в Axios?
вы используете перехватчики? Возможно, вы захотите взглянуть на эта ошибка
К вашему сведению, ваша первая попытка наиболее близка к правильной, так как вам нужно поместить заголовки под ключ headers.
Привет, @Фил. data — это такой объект: {текст: "это текст"}.
Вот что я подозревал. См. связанный дубликат вопроса. Также см. документы Axios ~ github.com/axios/…



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте код ниже.
Из https://github.com/axios/axios/issues/858
const endpoint = 'http://localhost/test.php'; // eg.
axios.post(endpoint,
querystring.stringify({
paramter: 'value',
}),
{
headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }
});
Здесь нет ничего, чтобы серилировать ваш { firstName: this.name } объект в application/x-www-form-urlencoded, так что это не сработает.
Вы правы, я изменю ответ. Спасибо!
Проблема, вероятно, в вашем
data. Что именно?