You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:15:32