Flask服务器无法接收JS Ajax函数传值的问题排查
解决Flask无法接收Ajax传递参数的问题
问题根源
- 你在Flask应用刚启动时就调用了
cgi.FieldStorage(),这时候还没有任何HTTP请求进来,form是空对象,var1自然是None,后续执行len(var1)就触发了TypeError。 - Flask本身内置了处理请求参数的工具,完全不需要依赖cgi模块。
修正后的Python代码
from flask import Flask, request from flask_cors import CORS app = Flask(__name__) CORS(app) @app.route("/", methods=['GET', 'POST']) def apicall(): # 用Flask内置的request对象获取参数,兼容GET和POST请求 var1 = request.values.get('var1') # 先判断var1不为空,再检查长度 if var1 and len(var1) > 1: return 'received value from JS function' # 增加默认返回,避免无返回值导致的异常 return 'No valid value received' if __name__ == "__main__": app.run(debug=True) # 开启debug模式方便调试
修正后的JavaScript代码(补全缺失的闭合)
你的Ajax代码漏了闭合括号,补全后才能正常发送请求:
function callPythonScript() { alert("called_python_script"); $.ajax({ url: "http://127.0.0.1:5000", type: "POST", data: { var1: window.location.href, }, success: function(response) { console.log(response); }, error: function(xhr) { console.log(xhr); } }); }
关键修改说明
- 删掉了cgi模块的依赖,改用Flask官方推荐的
request对象获取参数,这是Flask处理请求参数的标准方式。 - 将参数获取逻辑移到路由函数内部,确保每次有请求进来时才读取参数,而不是应用启动时就执行。
- 增加了
var1的非空判断,彻底避免None调用len()的错误。 - 补全了JavaScript代码的闭合结构,保证Ajax请求能正常发起。
内容的提问来源于stack exchange,提问作者nooblearner
相关产品推荐
相关产品推荐

