使用jquery和flask发送数组数据

时间:2014-05-27 12:10:18

标签: jquery flask

我需要将数据从html页面发送回我的Python应用程序:

$.post("/test", {x: [1.0,2.0,3.0], y: [2.0, 3.0, 1.0]}, function(dat) {console.log(dat);});

在服务器上:

@app.route('/test', methods=['POST'])
def test():
    print request.form.keys()
    print dir(request.form)
    print request.form["x[]"]
    return jsonify({"Mean": 10.0})

令我惊讶的是,钥匙是

['y[]', 'x[]']

print request.form["x[]"] 

结果为1.

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:17)

当发送包含数组或对象值的POST数据时,jQuery遵循PHP convention of adding brackets to the field names。它不是一个Web标准,但因为PHP支持它开箱即用,它很受欢迎。

因此,正如您所发现的那样,使用Flask端的列表处理POST数据的正确方法确实是在字段名称后附加方括号。您可以使用MultiDict.getlist()

检索列表的所有
request.form.getlist("x[]")

request.formMultiDict个对象)。这将返回字符串,而不是数字。如果您知道值是数字,您可以告诉getlist()方法为您转换它们:

request.form.getlist("x[]", type=float)

如果您不希望应用其他括号,请不要将数组用作值,或将数据编码为JSON。不过,您必须使用jQuery.ajax()代替:

$.ajax({
    url: "/test",
    type: "POST",
    data: JSON.stringify({x: [1.0,2.0,3.0], y: [2.0, 3.0, 1.0]}),
    contentType: "application/json; charset=utf-8",
    success: function(dat) { console.log(dat); }
});

在服务器端,使用request.get_json()来解析发布的数据:

data = request.get_json()
x = data['x']

这还负责处理数据类型转换;您将浮点数作为JSON发布,Flask将在Python端再次将这些值重新解码为浮点值。

答案 1 :(得分:1)

你可以使用烧瓶功能request.args.getlist('apps[]')  从您传递给服务器的js对象获取列表

var filter={}
 filter.startDate=$('#quant1').val(); 
 filter.endDate=$('#quant2').val(); 
 var checkedItems = [], counter = 0;
    $("#appNamesSelector div.active").each(function(idx, li) {
        checkedItems[counter] = $(li).text();
        counter++;
    });
filter.apps=checkedItems;
console.log($.param(filter));
    $.ajax({ type: "GET",   
 url: "/drilldown",
 data : filter  
});

Image shows how the array is passed into the server.