Как передать JavaScript список переменных каталога в Python Flask - PullRequest
1 голос
/ 02 мая 2020

Я хочу передать список словарей из JavaScript + HTML в Python + Flask и использовать его как список словарей.

Вот мой JavaScript:

List = [];


    function AddN(x, y, List, Field,selected = false) {
            List.push({
                id: ID,
                x: x,
                y: y,
                neighbour: [ID],
                selected: selected
            });
            ID += 1;
            document.getElementById(Field).value=List;
        }

А позже у меня есть скрытый ввод в форме HTML для размещения списка.

И мой Python выглядит так:

    @app.route("/Input.html",methods=["GET","POST"])
    def input():
        if request.method == "POST":
           nA = request.values.getlist("ListA")

Где ListA - это идентификатор и название упомянутого скрытого ввода в форме HTML. Используя print (), я вижу, что Python получает переменную типа: список, но она пуста, и я уверен, что она не пуста в HTML + JS.

Есть идеи?

Спасибо. ------------------------------------------------ Редактировать:

Вот код, который я использовал для публикации в своем HTML:

<form>
..........
<input type="hidden" id="ListA">
<input type="submit" id="Submit">
</form>

И я пробовал это тоже (не используется вместе с методом ввода-скрытия):

$.ajax({
    url:"/InputCanvas.html",
    type:"POST",
    data:JSON.stringify(answer)
});

Другие переменные (с плавающей точкой и целые числа) передаются в Python правильно. Только списки пусты.


Редактировать:

Я изменил тег HTML и добавил к нему имя. Программа публикует некоторый список строк, который выглядит следующим образом: ["[Object Object], [Object Object]"] и всегда с длиной 1.

1 Ответ

1 голос
/ 03 мая 2020

Похоже, в вашем элементе input html отсутствует атрибут name, поэтому в отправленной на сервер форме отсутствует ListA. Измените его на:

<input type="hidden" id="ListA" name="ListA">

Чтобы загрузить список в ваш Flask, я бы сделал следующие изменения:

  1. установите значение элемент input для правильно отформатированной строки json в вашей функции AddN. Убедитесь, что имена свойств заключены в двойные кавычки (иначе json.loads не будет правильно обрабатывать json):

    var value = {"list": List } document.getElementById(Field).value=JSON.stringify(value);

  2. измените Python, чтобы проанализировать строку как json:

    listA = request.values.get("ListA") value = json.loads(listA)

Затем вы можете получить доступ к списку, используя value['list'].

...