Flask通过request接收Ajax POST提交的数组列表无效问题
问题原因
你拿不到数据是三个错误叠在一起导致的:
- 前端传参逻辑错误:jQuery的
$.ajax默认会把传入的data对象序列化成application/x-www-form-urlencoded格式的表单键值对,复杂嵌套的对象数组用默认方式传会被打散结构,根本保留不了原始的数组嵌套格式;另外你贴的前端代码data: dataToSend后面缺逗号,本身就有语法问题。 - 请求头配置错误:你没指定发送数据的格式,后端根本没法识别你传的是JSON结构;注意
dataType: "json"只是告诉jQuery你预期后端返回JSON,和你发出去的数据格式没关系。 - 后端取值逻辑完全错误:
request.args是用来取URL上拼接的GET查询参数的,POST请求提交的请求体数据根本不会存在这个属性里;而且getlist方法要求传入字符串类型的键名,你传[0]数组当参数本身用法就不对。
正确实现方案
前端修正
发送前把对象数组序列化成JSON字符串,同时指定请求头为JSON格式,补全语法缺漏:
const dataToSend = [{ "Amobia at 40 mm (J)": "", "Diameter (mm)": "", "Thickness (mm)": "", "Resin/100 (mm)": "" }, { "Amobia at 40 mm (J)": "", "Diameter (mm)": "", "Thickness (mm)": "", "Resin/100 (mm)": "" }]; $.ajax({ type: 'POST', url: '/your/submit/api', // 替换成你自己的后端接口地址 dataType: "json", contentType: "application/json", // 声明发送的是JSON格式数据 data: JSON.stringify(dataToSend), // 把JS对象序列化成JSON字符串 success: function (response) { console.log('接口返回', response) } })
后端Flask修正
POST请求的JSON体直接调用request.get_json()就能拿到解析完成的原生Python列表/字典,和前端传的结构完全一致,不需要额外解析:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/your/submit/api', methods=['POST']) def handle_submit(): # 直接获取前端传的对象数组 recv_list = request.get_json() # 打印验证结构 print("接收到的数组:", recv_list) # 按列表索引取值即可,比如取第一个对象的厚度字段 print("第一条数据的厚度:", recv_list[0]["Thickness (mm)"]) return jsonify(status="success", message="数据接收成功") if __name__ == '__main__': app.run(debug=True)
补充说明:如果非要用表单格式传数组,需要前端给每个字段拼索引键名,后端用
request.form.getlist()按键取值,但这种方式处理嵌套对象非常繁琐,传结构化数据优先用上面的JSON方案,出错概率最低。
内容的提问来源于stack exchange,提问作者Puzzlemaster
相关产品推荐
相关产品推荐

