Невозможно проанализировать данные json из ajax в колбе - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь передать данные из ajax в router.py в колбу через json.Иногда я вызывал диалоговое окно с фактическими данными, но я не могу разобрать данные или они отображаются на веб-странице.пытается манипулировать данными).

rout.py

@app.route("/post", methods=['GET', 'POST'])
def post():
    data = request.get_json()
    jsonify(data=data)
    x = request.json['index']

    return render_template('post.html', x=x)

request.json ['index'] не работает и выдает TypeError: 'NoneType'

если я верну jsonify (data = data) вместо того, чтобы получить его до возврата, я смогу увидеть данные в диалоговом окне, когда перейду на localhost: 5000 / post

index.html

<script>
         $(function() {
            $( "#sortable" ).sortable({
                update: function(event, ui) {
                    var postData = $(this).sortable('serialize');



                }
            });
        });

        function postSave() {$( "li" ).each(function( index ) {
                        console.log( index + ": " + $( this ).attr('id') );


                        $.ajax({
                            url: '/post',
                            data: JSON.stringify({ "index" : index, "id" : $( this ).attr('id') } ),
                            type: 'POST',
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: function (data) {
                                alert(JSON.stringify(data));
                            }

                         });
                         var url = "/post";
                         $(location).attr('href',url);

                        });
            }



        </script>

post.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!-- simply be able to parse through the data and print it here for testing purposes -->
</body>
</html>

вся помощь очень ценится, я выдергиваю волосы, пока мы говорим:)

1 Ответ

0 голосов
/ 12 февраля 2019

Ваш маршрут post настроен для обработки запросов GET и POST, но вы не различаете запросы GET и POST.Поскольку нет различий между двумя типами запросов, если ваш браузер отправил запрос GET на ваш почтовый маршрут на вашем флеш-сервере, в вашем запросе не будет данных JSON. Простое условие, подобноеследующее: if flask.request.method == 'POST': может использоваться для различения двух типов запросов.С учетом вышесказанного, может быть, вы могли бы попробовать что-то вроде следующего:

  @app.route('/post', methods=['GET', 'POST']) 
      def post():
          if request.method == "POST":
              req_data = request.get_json()
              x = req_data['index']
              return render_template('post.html', x=x)
           else: # GET request
              # handle as you see fit probably want to render a page 
              # with inputs for a user to fill out 
              return render_template(<page_you_wish_to_render>)

Если это не сработает, не могли бы вы распечатать req_data?Таким образом, мы можем видеть, как выглядит запрос, поскольку он может быть недействительным JSON.

Кроме того, ваш вызов ajax выглядит немного не так, возможно, вы могли бы отредактировать только часть Ajax примерно так:

$.ajax({
    type : 'POST',
    url : "{{url_for('post')}}",
    contentType: 'application/json;charset=UTF-8',
    data : {'index':index}
});

Наконец, я бы поставил оператор debugger прямо перед отправкой запроса ajax, чтобы убедиться, что запрос правильный.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...