Невозможно отправить массив объектов в колбу, используя JSON & AJAX - PullRequest
0 голосов
/ 18 октября 2019

Я получаю пустое [], когда нажимаю, сгенерировать:

127.0.0.1 - - [18 / Oct / 2019 01:04:37] "POST / HTTP / 1.1" 200 - []

Вот массив & JSON в JS:


    var List = [
        { load: "2", location: "3" },
        { load: "2", location: "4" },
        { load: "2", location: "8" },
        ];

    document.querySelector('#generate').addEventListener('click',function() {
        var json_list = JSON.stringify(List)
        $.ajax({
            type: "POST",
            contentType: "application/json;charset=utf-8",
            url: "/",
            traditional: "true",
            data: json_list,
            dataType: "json"
            });

    })

А вот код во Flask:


    @app.route('/',methods =['GET','POST'])
    def index():
        req = request.get_json()

        print(req)
        return render_template("index.html")

Однако, если я отправлю массив только чисел,нет объектов внутри (например, [2,3,4,5]) Я на самом деле получаю массив на моем терминале Python. Итак, что я должен добавить для прохождения объектов?

Редактировать: Когда я jsonify ввод в колбу, я получаю: Ответ 86 байт [200 OK]

1 Ответ

0 голосов
/ 19 октября 2019

Этого можно достичь с помощью API выборки ( см. Поддерживаемые браузеры ), которое не зависит от Jquery.

Основываясь на этом другом полезном ответе , вы можетеиметь шаблон на templates/index.html:

<html>
<body>
<button type="button" id='generate'>Click Me!</button> 

  <script type='text/javascript'>
    var List = [
      { load: "2", location: "3" },
      { load: "2", location: "4" },
      { load: "2", location: "8" },
      ];

    document.getElementById('generate').addEventListener('click', event => {

    fetch("/", {
        method: "POST",
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(List)
      }).then(res => {
        console.log("Request complete! response:", res);
      });
    });

  </script>
</body>
</html>

Файл фляги должен выглядеть следующим образом:

from flask import Flask , request, render_template, jsonify
app = Flask(__name__)

@app.route('/',methods =['GET','POST'])
def index():
    if request.method == 'POST':
        req = request.get_json()
        print(req)
        return jsonify({'status':'success'})

    else:
        return render_template('index.html')

if __name__=='__main__':
    app.run(host='0.0.0.0')

Обратите внимание, что это также обрабатывает логику на основе метода запроса:

  • POST-запрос выведет полезную нагрузку json (req) на консоль сервера, а затем вернет ответ, используя функцию Flask jsonify.
  • Любой другой запрос отобразит шаблон templates/index.html. (отобразить пользовательский интерфейс с кнопками для пользователя)

Когда вы нажимаете кнопку в интерфейсе, вы видите это на консоли сервера:

[{'load': '2', 'location': '3'}, {'load': '2', 'location': '4'}, {'load': '2', 'location': '8'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...