javascript - How to accept json data sent from jquery from flask?
漂亮男人
漂亮男人 2017-05-18 11:01:48
0
3
616

The flask app accepts json data from the front end, but the flask request does not accept it successfully. There is no data in it, and it does not work after changing many functions.
js code

$(function(){
    $("#test").click(function(){
        $.ajax({
            url: "{{ url_for('main.getjson') }}",
            type: "POST",
            data: JSON.stringify({
                "n1": "test1",
                "n2": "test2",
                "n3": "test3"
            }),
            dataType: "json",
            success: function(data){
                var a = data.user
                var texthtml = "<p>" + a + "</p>"
                $("#result").html(texthtml)
            }
        });
    });
});

View functions in flask:

@main.route('/getjson', methods = ['GET', 'POST'])
def getjson():
    a = request.json
    if a:
        return jsonify(user = "Right")
    return jsonify(user = "error")

Only determines whether request.json exists, but the string returned is always "error". There is always null in request.json. Later, I changed request.args.get(), but it also didn't work. Where did I go wrong? I sincerely ask for advice.

漂亮男人
漂亮男人

reply all(3)
小葫芦

I found the answer, it was just a problem with the jquery part. The parameter contentType of $.ajax defaults to "application/x-www-form-urlencoded". You need to set this parameter to application/json.

$.ajax({
        url: "{{ url_for('main.getjson') }}",
        type: "POST",
        data: JSON.stringify({
            "n1": "test1",
            "n2": "test2",
            "n3": "test3"
        }),
        contentType: "application/json",
        dataType: "json",
        success: function(data){
            var a = data.user
            var texthtml = "<p>" + a + "</p>"
            $("#result").html(texthtml)
        }
    });

Reference: https://flask.readthedocs.io/...
http://stackoverflow.com/ques...

Peter_Zhu

jquery’s ajax does not require JSON.stringify when sending data. It will be processed automatically.

迷茫

According to your description, you have found the problem, why not continue to try it, or read the documentation

@app.route('/api', methods=['POST'])
def api():
    a = request.json
    b = request.get_data()
    c = request.values
    print a
    print b
    print c
    if a:
        return 'ok'
    return 'error one'

Output results

None
{"id":1}
CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('{"id":1}', u'')])])

request.json is very strange. It really has no data, but it can be used. The reason why it is not useful here is as follows:

json If the mimetype is application/json this will contain the parsed
JSON data. Otherwise this will be None. The get_json() method should
be used instead.
But when I use get_json(), it ruthlessly reports an AttributeError : 'Request' object has no attribute 'get_json'

So I only successfully used request.json once, and then never succeeded again, because it is magical, if I can find an alternative to request.json.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!