Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Wie akzeptiere ich von JQuery gesendete JSON-Daten von Flask?

Die Flask-App akzeptiert JSON-Daten vom Frontend, die Flask-Anfrage akzeptiert sie jedoch nicht. Es enthält keine Daten und funktioniert auch nach Änderung vieler Funktionen nicht.
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)
            }
        });
    });
});

Funktionen im Flask anzeigen:

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

Bestimmt nur, ob request.json existiert, aber die zurückgegebene Zeichenfolge ist immer „error“. In request.json steht immer null. Später habe ich request.args.get() geändert, aber es hat auch nicht funktioniert. Was habe ich falsch gemacht? Ich bitte aufrichtig um Rat.

漂亮男人漂亮男人2711 Tage vor621

Antworte allen(3)Ich werde antworten

  • 高洛峰

    高洛峰2017-05-18 11:03:48

    找到答案了,仅仅是在jquery部分出了问题。$.ajax的参数contentType,默认是 "application/x-www-form-urlencoded",需要把这个参数设置成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)
            }
        });

    参考:https://flask.readthedocs.io/...
    http://stackoverflow.com/ques...

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-05-18 11:03:48

    jquery的ajax发送data的时候不需要JSON.stringify.他会自动处理.

    Antwort
    0
  • 迷茫

    迷茫2017-05-18 11:03:48

    根据你的描述,你的已经把问题找到了,为什么不继续尝试一下,或者看下文档

    @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'

    输出结果

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

    request.json很奇葩,确实没数据,但是它是可以用的,你这里没用的原因如下:

    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.
    但是我使用get_json(),它无情的报错说AttributeError: 'Request' object has no attribute 'get_json'

    所以我只是成功使用过一次request.json,后来再也没有成功过,因为它很神奇,如果可以找一个替代request.json吧。

    Antwort
    0
  • StornierenAntwort