2017-04-17 2 views
0

Ich versuche, JSON-Daten von JavaScript an die Flaskapp zu senden. Aber die JSON-Daten, die von JavaScript gesendet werden, werden von der Flasche nicht akzeptiert, die Anfrage ist null, wo ist das falsch?Warum meine Flasche App kann nicht erhalten json von Javascript?

Hier ist mein Flaschencode.

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

Hier ist mein JavaScript-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) 
      } 
     }); 
    }); 
}); 

Die auf der Seite zurückgegebenen Daten sind immer null. Request.arg.get funktioniert auch nicht.

+0

Do not stringify, senden Sie einfach das eigentliche Objekt als 'Daten:'. Und ich denke, 'Request.arg [s] .get'„funktioniert nicht“, weil Sie eine' Post' Anfrage sind zu senden –

+0

@ChrisG Sie unbedingt wollen, um die Daten stringify wenn Sie JSON senden möchten. Ihnen fehlt nur der Inhaltstyp. – davidism

+0

@davidism Entfernen 'JSON.stringify' den Content-Type auf' application/json' (und stringify das Objekt) Auto-Set- –

Antwort

0

Flask's request.json erfordert den Inhaltstyp application/json aber $.ajax setzt application/x-www-form-urlencoded standardmäßig. Legen Sie den Inhaltstyp bei der Anforderung fest.

$.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) 
     } 
    }); 

Alternativ schicken Sie das Objekt selbst, ohne JSON.stringify():

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

Dadurch werden die Daten als Formular-kodierte senden, so dass Sie request.form in Flask verwenden würde, es zu lesen.

Die dataType ist die Art der Daten, die Sie von Server erwarten, während die contentType ist die Art der Daten, die Sie an den Server senden.

See:

Verwandte Themen