2017-04-08 34 views
0

我使用AJAX將POST中的數據發送給Flask,但是我得到的POST數據並不是我的技能可以解析的東西。有人可以幫我試試並理解我可以如何將這些變量解析成列表?Flask post解析數據變量

在瓶所看到的數據是這樣的:

items%5B%5D=104-92923-G42LH&items%5B%5D=102-10001-CRD-P07G19&items%5B%5D=104-92925-SML-CLRH&items%5B%5D=104-92923-92R-LH&items%5B%5D=104-92924-COLTRH

當我與一個在線解碼器進行解碼,然後我看到:

items[]=104-92923-G42LH&items[]=102-10001-CRD-P07G19&items[]=104-92925-SML-CLRH&items[]=104-92923-92R-LH&items[]=104-92924-COLTRH

我的問題是,我有不知道如何解析這個字符串到列表中。我使用了差異request函數來查看我是否可以用其他方式獲取數據,但仍然沒有運氣。目前我使用我的燒瓶功能中的data = request.stream.read()來查看數據。

而且,這裏是我的AJAX功能:

$("#myForm").submit(function(e) { 
      var url = "http://127.0.0.1:8080/_data"; 
      var result = []; 
       $('.varSku').each(function() { 
       result.push($(this).data("sku")); 
       }); 
      var data1 = {items: result}; 
      $.ajax({ 
       type: "POST", 
       url: url, 
       dataType : "string", 
       data: data1, 
       success: function(data) 
       { 
        console.log(data); 
       } 
       }); 
      e.preventDefault(); 
     }); 

我的瓶功能:

@app.route('/_data', methods=['GET','POST']) 
def invoice(): 
    data = request.stream.read() 
    print data.decode('utf8') 
    return "data" 

任何幫助將非常感激。

回答

0

問題是,當發送包含數組或對象的值的POST數據時,jQuery遵循一個將括號添加到字段名稱的PHP約定。

爲了得到過去吧,我只好用所謂MultiDict.getlist()另一個功能,因此我不得不當我改變爲'的Request.Form [「項目」更改爲request.form.getlist("items[]")

感謝您的幫助@馬丁

0

您正在尋找request.form,它會自動將正文內容解析爲字典。在你的情況下,你應該使用request.form["items"]

查看documentation瞭解更多信息。

+0

]'按照你的建議,我得到一個空的字典'items []'。 –

+0

對於列表參數,您應該定義parser.add_argument('items',type = str,location ='form')'。我不在家,所以我不能測試代碼,但它都是[記錄] [https://flask-restful.readthedocs.io/en/0.3.4/reqparse.html#multiple-values-lists ]。 –