使用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。

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

当发送包含数组或对象值的POST数据时,jQuery遵循向字段名称添加括号的PHP约定 。 它不是一个Web标准,但因为PHP支持它开箱即用,它很受欢迎。

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

 request.form.getlist("x[]") 

request.form是一个MultiDict对象)。 这会返回字符串 ,而不是数字。 如果您知道值是数字,您可以告诉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端再次将这些值解码为浮点值。

您可以使用flask函数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 }); 

该图显示了如何将数组传递到服务器。