Обмен данными между Flask и Javascript

#javascript #python

Вопрос:

Я написал простое приложение на Python Flask. Есть страница, часть которой должна обновляться через определенный промежуток времени (например, 1 секунда). Я понятия не имею, как это реализовать на Flask, поэтому решил использовать JavaScript (я практически не знаком с этим языком). Скрипт ежесекундно обращается к серверу Flask по определенному URL-адресу и получает данные в формате JSON. В Python обработчик этого URL-адреса отправляет ответ с помощью jsonify() функции. Отправляемый объект представляет собой массив словарей на Python — [{key: value,...}, {key: value,...},...] . В JavaScript я получаю (вероятно) массив объектов — [object Object], [object Object] . Мой вопрос в том, как мне получить аналогичный объект в JS, как в Python, чтобы правильно извлечь информацию. На языке Python:

 [{'sender': '10.0.0.10:3000', 'recipient': ['10.0.0.10:2000'], 'amount': 1, 'message': 'hi'}, 
{'sender': '10.0.0.10:3000', 'recipient': ['10.0.0.10:2000'], 'amount': 1, 'message': 'hello'}]
 

В JS:

 [object Object], [object Object]
 

Обработчик URL-адресов, сообщения — массив словарей:

 @app.route('/consensus', methods=['GET'])
def consensus():
    messages = blockchain.resolve_conflicts()
    return jsonify(messages=messages)
 

JS-скрипт, на html-странице есть блок с сообщением ID #

     setInterval(function () {
                $SCRIPT_ROOT = {{ request.script_root|tojson|safe }}
                $.getJSON($SCRIPT_ROOT "/consensus",
                    function(data) {
                        $("#messages").text(data.messages)
                    });
            }
    , 10000)
 

Ответ №1:

Попробуйте это, чтобы увидеть, из чего состоят объекты:

$("#messages").text(JSON.stringify(data.messages))

Затем вам нужно узнать о доступе к свойствам объекта. Происходит то, что ваш объект преобразуется в строку, которая для любого объекта JS является строковым значением object Object по умолчанию.

Если ваш объект выглядит следующим образом: x = {name: 'Tom'} тогда, если вы напечатаете объект (x), он напечатает object Object — но если вы напечатаете x.name , он напечатает тома.

Другими словами, вам нужно отформатировать строку, а не просто распечатать строковое значение объекта.

Есть много примеров того, как это сделать, вот несколько: https://www.w3schools.com/js/js_object_display.asp

Комментарии:

1. $(«#сообщения»).текст(JSON.stringify(данные.сообщения)) — это помогло мне, и данные отображались правильно