无法从Flask中的Ajax解析JSON数据

时间:2019-02-12 01:29:27

标签: python json ajax flask

我正在尝试通过json将数据从ajax传递到flask中的路由。有时我会弹出一个包含实际数据的对话框,但我无法解析数据或将其显示在网页本身上。(我最终需要让此数据操作sql db,但现在我只是试图能够处理数据)。

routes.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 :(得分:2)

您的post路由已配置为同时处理GETPOST请求,但是您无法区分GETPOST请求。如果您的浏览器将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请求之前,我会先声明$.ajax({ type : 'POST', url : "{{url_for('post')}}", contentType: 'application/json;charset=UTF-8', data : {'index':index} }); ,以确保该请求正确。

希望有帮助!