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

使用JavaScript Fetch API与Flask通信无法获取文本响应求助

问题解决:Fetch API无法获取Flask返回的文本响应

核心错误原因

你的JavaScript代码中,第一个.then回调写法错误:

.then(res => Response.body)

这里你访问的是全局Response构造函数的body属性,而非当前响应对象res的内容读取方法。Response.body本身未定义,导致后续输出undefined。

修正后的JavaScript代码

要获取纯文本响应,需调用响应对象的text()方法(该方法返回Promise,解析后得到文本内容):

fetch("/validatelogin", {
    method: "POST",
    headers: {'Content-Type': 'application/json'}, 
    body: JSON.stringify({"username": credentials[0],"password": credentials[1]}, null, 4)
})
.then(res => res.text()) // 调用res.text()读取文本响应
.then(body => console.log(body)) // 此处可正常拿到"yes"或"no"
.catch(err => console.error("请求出错:", err)) // 建议添加错误捕获逻辑

Flask代码简化(可选)

Flask支持直接返回字符串与状态码,无需手动创建make_response,可简化代码:

@app.route('/validatelogin', methods=['POST'])
def login(): 
    users = loads(post(
        'http://localhost:8000/sql',
        headers=headers,
        auth=HTTPBasicAuth('nonono','rnoonononoo'),
        data=f"SELECT * FROM user WHERE username = {request.json['username']} AND password = {request.json['password']}"
    ).text)[0]["result"]
    
    if users != []: 
        return "yes", 200
    
    return "no", 200

重要安全提醒

你的SQL查询存在严重的SQL注入漏洞!直接用字符串拼接用户输入的方式构造SQL语句,攻击者可通过恶意输入篡改查询逻辑,窃取或破坏数据库数据。必须改用参数化查询,示例思路:

# 替换原字符串拼接方式,使用参数占位符
data = {
    "query": "SELECT * FROM user WHERE username = %s AND password = %s",
    "params": [request.json['username'], request.json['password']]
}
# 具体格式需根据你的SQL接口要求调整

内容的提问来源于stack exchange,提问作者Ender Bender

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:42:16