2017-06-14 213 views
0

我的AJAX調用看起來是這樣的:如何在Python中接收對象數組作爲參數使用AJAX作爲HTTP請求傳遞Flask?

$.ajax({ 
    url: "/doSomeCoolThingOnServer", 
    type: "POST", 
    async: false, 
    data: { 
     simple_string: "Variable sent from client side", 
     array_of_strings: ["John", "George"], 
     array_of_objects: [ 
     { city: "Shanghai", population: 1000 }, 
     { city: "Budapest", population: 2501 } 
     ] 
    }, 
    success: function(response) { 
     console.log("===== SUCCESS ====="); 
     console.log(response); 
    }, 
    error: function(response) { 
     console.log("===== ERROR ====="); 
     console.log(response); 
    } 
    }); 

我想收到數組對象如Python的類型的字典的數組的,但我有空數組返回。

@app.route("/doSomeCoolThingOnServer", methods=['POST']) 
def doSomeCoolThingOnServer(): 
    simple_string = request.form['simple_string'] 
    array_of_strings = request.form.getlist('array_of_strings[]') 
    array_of_objects = request.form.getlist('array_of_objects[]') 

    print(simple_string) #returns desired string 
    print(array_of_strings) # returns desired array 
    print(array_of_objects) # returns empty array 

請指教如何在Python中接收對象數組作爲參數Flask作爲HTTP POST請求使用AJAX傳遞?

回答

1

您可以使用JSON.stringify序列化您的對象,然後在服務器上使用json.loads反序列化。這有效地將您的對象數組作爲字符串數組發送。

序列化AJAX調用:

array_of_objects: [ 
    JSON.stringify({ city: "Shanghai", population: 1000 }), 
    JSON.stringify({ city: "Budapest", population: 2501 }) 
] 

反序列化服務器上​​:

import json 
array_of_objects = request.form.getlist('array_of_objects[]') 
print([json.loads(s) for s in array_of_objects]) 

另一種選擇是單獨序列整個陣列,而不是每個數組元素。這將對象的數組作爲單個字符串發送:

array_of_objects: JSON.stringify([ 
    { city: "Shanghai", population: 1000 }, 
    { city: "Budapest", population: 2501 } 
]) 

import json 
array_of_objects = request.form['array_of_objects'] 
print(json.loads(array_of_objects)) 
相關問題