Отправка нескольких объектов в axios.post — firebase

#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));
            });
    }
}