jquery - 使用jquery和flask发送数组数据

标签 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})

令我惊讶的是,这些 key 是

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

print request.form["x[]"] 

结果为 1。

正确的做法是什么?

最佳答案

当发送包含数组或对象值的 POST 数据时,jQuery 遵循 PHP convention of adding brackets to the field names 。它不是 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']

这还负责处理数据类型转换;您将 float 发布为 JSON,Flask 会在 Python 端再次将它们解码回浮点值。

关于jquery - 使用jquery和flask发送数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23889107/

相关文章:

jquery - 一个不糟糕的 Jquery 旋转器?

flask - 在按钮 onclick location.href 重定向中使用 Flask url_for 导致 `Method Not Allowed`

javascript - 使用 JavaScript 对 HTML 中的 Python/Flask 动态呈现的表进行排序

django - 与Flas一起使用Django

python - 如何从 python Controller 的表单中打印所有 POST 变量

jquery - 有没有办法提取CSS选择的属性值?

javascript - 使用 onClick window.open 事件更改图像 src

javascript - 检查2张图片是否相同

javascript - 无法禁用文本区域中的逗号

python - 单元测试 Python Flask Stream