сохранить список значений в flask и reactjs, используя форму данных - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь сохранить список значений массива в flask, используя данные формы. Вот как я отправляю данные списка из внешнего интерфейса

saveProjectDesign = () => {
    var data = new FormData();
    data.append('styleCheckedList', this.state.styleCheckedList);

    axios.post(this.state.apiUrl+'/api/v1/project/project/projectdesignsave', data, config)

        .then((response) => {
            console.log("response",response);
            if (response.data.status === "success") {
                openCustomNotifierSnackbar({ message: response.data.message, duration:3000, notifyType: 'success' });

            }
            if (response.data.status === "failed") {
                openCustomNotifierSnackbar({ message: response.data.message, duration:3000, notifyType: 'error' });
            }
        })
        .catch( (err)=> { console.log(err); });
};

вот список данных в styleCheckedList, из которого я отправляю внешний интерфейс:

0: {styleId: "1"}
1: {styleId: "2"}
2: {styleId: "3"}

Вот как пытались получить значение ins flask:

 styleListChecked = request.form.getlist("styleCheckedList")

Но значение печатается в бэкэнде так:

['[object Object],[object Object],[object Object]', '[object Object],[object Object],[object Object]']

что я тут не так делаю?

1 Ответ

1 голос
/ 13 апреля 2020

Вот в чем проблема: FormData метод append ожидает строку, а не массив, не объект, а строку. Когда вы передали этот массив, JavaScript автоматически вызвал для него .toString() и получил этот ужасный результат с toString каждого элемента, разделенного запятыми. Если вы хотите отправить массив, вам нужно добавить каждый элемент отдельно, как если бы он был из POST из HTML формы

for (let element of this.state.styleCheckedList) {
    data.append('styleCheckedList[]', element);
}

. Каждый элемент рассматривается как часть массива styledCheckedList , Вы бы сделали, но есть другая проблема. Теперь вы добавляете объекты, а не строки к FormData, и это просто даст вам массив '[object Object]' на стороне сервера. Вот где это становится сложным.

Невозможно отправить сложные JavaScript объекты через FormData. Вам придется либо а) кодировать его в JSON с помощью JSON.stringify() и декодировать на сервере, либо б) если в каждом объекте есть только клавиша styleId, отправьте только element.styleId.

Если вам все равно, JSON.stringify() весь объект в вашем текущем коде и JSON.loads() на сервере.

Удачи!

...