#javascript #firebase #redux
#javascript #firebase #сокращение
Вопрос:
Я пытаюсь отправить несколько объектов с помощью axios.post таким образом:
export const onOrderSent = (deliveryData,orderData,fullPrice) => {
return dispatch => {
let data = {deliveryData,orderData,fullPrice};
dispatch(sendOrderStart());
axios.post('/orders.json', data)
.then(response => {
...
})
.catch(error => {
...
});
}
}
Но, похоже, это работает, только если один из них пуст, а не два одновременно. Если они оба имеют некоторые значения, отправка не отправляется. кстати, fullPrice — это прямое значение, а не объект.
Почему это так, и как я должен правильно отправлять axios.posts с несколькими объектами?
Ответ №1:
Попробуйте отправить несколько объектов в массив.
const data = {objects: [deliveryData, orderData, fullPrice]};
Комментарии:
1. Единственное изменение заключается в том, что теперь все они перемещены в «объекты» в дереве данных, но все еще не отправляются, пока оба объекта имеют некоторые значения: (
2. Вы видите, что поступает в серверную часть, или можете поделиться своим кодом для маршрута?
3. если я правильно понял ваш вопрос, у меня есть доступ только к такому просмотру imgur.com/a/CvGaZrM
4. И, как вы видите, им обоим не хватает orderData 🙁
5. Тогда это не ошибка POST-запроса, а то, как вызывается функция «onOrderSend». Тогда передаются не все параметры. Ошибка находится за пределами функции. Поэтому вам нужно будет опубликовать, где и как это вызывается.
Ответ №2:
Сделайте это списком объектов, подобных этому, я бы предположил, что ваш api будет принимать список объектов, но не объект объектов.
let data = {[deliveryData,orderData,fullPrice]};
Если это не сработает, загляните в серверную часть и посмотрите, какой тип данных они принимают.
я почти уверен, что вы должны отправлять массив объектов, если нет, загляните в серверную часть.
Комментарии:
1. Ваш код выдает ошибку синтаксического анализа: неожиданный токен
Ответ №3:
Наконец-то исправлено. Это была самая глупая вещь, с которой я когда-либо сталкивался, и никогда бы не подумал, что это проблема …
Просто добавьте event.preventDefault(); к вашему обработчику. Действительно, работает как шарм
orderSendHandler = (event) => {
event.preventDefault();
...
///im mapping local state to object here, and then
const data = {
deliveryData: formData,
order: this.props.orderedItems,
price: this.props.fullPrice
};
this.props.onOrderSent(data);
}
и в моем файле действий, где я управляю всем, что связано с базой данных
export const onOrderSent = (data) => {
return dispatch => {
dispatch(sendOrderStart());
console.log(data);
axios.post('/orders.json', data)
.then(response => {
console.log(response);
dispatch(sendOrderSuccess());
})
.catch(error => {
console.log(error);
dispatch(sendOrderFail(error));
});
}
}