2017-04-17 64 views
0

我嘗試從JavaScript發送json數據到flaskapp。但JavaScript發送的json數據不被容器接受,請求爲空,哪裏出錯?爲什麼我的燒瓶應用程序無法從JavaScript恢復json?

這是我的燒瓶代碼。

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

這是我的javascript代碼。

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

頁面上返回的數據始終爲空。 Request.arg.get也不起作用。

+0

不要字符串化,只發送實際的對象作爲'數據:'。我猜'Request.arg [s] .get'「不起作用」,因爲你發送了一個POST請求 –

+0

@ChrisG如果你想發送JSON,你絕對想要將數據串聯起來。他們只是缺少內容類型。 – davidism

+0

@davidism刪除'JSON.stringify'會自動將content-type設置爲'application/json'(並將對象字符串化) –

回答

0

Flask的request.json需要application/json內容類型,但$.ajax默認設置爲application/x-www-form-urlencoded。設置請求時的內容類型。

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

另外,發送的對象本身,而不會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) 
     } 
    }); 

這將發送數據的形式編碼的,所以你會使用request.form在瓶讀它。

dataType是您希望從服務器接收的數據類型,而contentType是您發送到服務器的數據類型。

參見:

相關問題