Python Flask与jQuery.post配合使用时无法正常获取提交参数怎么办
问题原因
- 核心错误是Flask侧取参方式不匹配:
request.args仅用于读取URL后缀的查询参数(即URL中?后面拼接的key=value内容),而jQuery$.post默认将提交的data放在POST请求的请求体中,格式为application/x-www-form-urlencoded,不会出现在URL参数里,所以读取结果为空。 - 首次运行正常属于巧合:大概率是首次测试时你误将参数拼接在URL后、或者临时用GET请求测试接口,刚好匹配了
request.args的取参逻辑,后续调整为标准POST提交后逻辑就失效了。
解决方案
两种方案二选一即可:
方案1:前端代码不变,仅调整Flask取参逻辑
不需要修改前端提交逻辑,适配jQuery默认的表单提交格式:
import json from uuid import uuid4 from flask import request @app.post('/approve') def approve_topic(): # 从POST表单中读取参数并转为字典 args = request.form.to_dict() print(args) json.dump(args, open("topics/"+uuid4().hex+".json", "w")) return {"status":"clear"}
方案2:前后端统一用JSON格式提交,适配复杂参数场景
如果后续需要传递嵌套结构等复杂参数,推荐用JSON格式交互:
首先修改前端jQuery代码,指定JSON提交格式:
$.post({ url: "/approve", contentType: "application/json", data: JSON.stringify({"title":title,"content":content}), success: function(){ window.location.reload(true) } });
再修改Flask侧代码读取JSON请求体:
import json from uuid import uuid4 from flask import request @app.post('/approve') def approve_topic(): # 读取JSON格式的请求体数据 args = request.get_json() print(args) json.dump(args, open("topics/"+uuid4().hex+".json", "w")) return {"status":"clear"}
内容的提问来源于stack exchange,提问作者saundy
相关产品推荐
相关产品推荐

