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

React向Flask接口传输入数据时遇循环对象及新错误求助

问题描述

我有一个基于Node.js后端和MySQL数据库的React应用,需要将React输入字段的数据发送给Python API作为Python函数参数。使用Axios向Flask服务器发送数据时出现循环对象错误,后续还出现新的请求错误,相关代码如下:

React组件代码

const send_data = ()=>
{
    const trade = document.getElementById("trade");
    const index = document.getElementById("index");
    const tradeType = document.getElementById("type");
    const strikePrice = document.getElementById("strikeP");
    const trigger = document.getElementById("trigger");
    const perc = document.getElementById("percentage");
    const ce = document.getElementById("ce");
    const pe = document.getElementById("pe");
    const entry = document.getElementById("entry");
    const exit = document.getElementById("exit");


    axios.post("127.0.0.1:5000/trade_data" , {
        trade_no : trade.value,
        index_name : index.value,
        trade_type : tradeType.value,
        strike_price : strikePrice,
        ce_d : ce.value,
        pe_d : pe.value,
        entry_time : entry.value,
        exit_time : exit.value,
        trigger_points : trigger.value,
        sl_percentage : perc.value
    }).then(console.log("Data Sent"));
}

按钮调用代码

<button id="start" onClick={send_data}>Start</button>

Flask代码

from flask import Flask
import requests

app = Flask(__name__)
@app.route('/trade_data' , methods = ['GET'])

def show_data():
    r = requests.get("http://127.0.0.1:5000/trade_data")
    print(r)
    return r

if __name__ == '__main__':
    app.run(debug = True)

解决方案

React端修复

1. 解决循环对象错误

strike_price字段直接传递了DOM元素而非其value属性,DOM对象包含循环引用无法被JSON序列化,导致错误。修改如下:

// 原代码
strike_price : strikePrice,
// 修改后
strike_price : strikePrice.value,

2. 修复请求URL错误

请求地址缺少http://前缀,浏览器会将其视为相对路径,导致请求发送到React应用域名而非Flask服务器:

// 原代码
axios.post("127.0.0.1:5000/trade_data" , { ... })
// 修改后
axios.post("http://127.0.0.1:5000/trade_data" , { ... })

3. 修复Promise回调执行时机错误

.then(console.log("Data Sent"))会立即执行日志输出,而非请求成功后执行,改为箭头函数并添加错误捕获:

// 原代码
.then(console.log("Data Sent"));
// 修改后
.then(() => console.log("Data Sent"))
.catch(err => console.error("请求失败:", err));

修复后的React完整代码

const send_data = () => {
    const trade = document.getElementById("trade");
    const index = document.getElementById("index");
    const tradeType = document.getElementById("type");
    const strikePrice = document.getElementById("strikeP");
    const trigger = document.getElementById("trigger");
    const perc = document.getElementById("percentage");
    const ce = document.getElementById("ce");
    const pe = document.getElementById("pe");
    const entry = document.getElementById("entry");
    const exit = document.getElementById("exit");

    axios.post("http://127.0.0.1:5000/trade_data", {
        trade_no: trade.value,
        index_name: index.value,
        trade_type: tradeType.value,
        strike_price: strikePrice.value,
        ce_d: ce.value,
        pe_d: pe.value,
        entry_time: entry.value,
        exit_time: exit.value,
        trigger_points: trigger.value,
        sl_percentage: perc.value
    }).then(() => console.log("Data Sent"))
      .catch(err => console.error("请求失败:", err));
}

Flask端修复

1. 匹配请求方法

React使用POST发送数据,但Flask路由仅允许GET方法,修改路由配置:

# 原代码
@app.route('/trade_data' , methods = ['GET'])
# 修改后
@app.route('/trade_data' , methods = ['POST'])

2. 解决循环调用问题

原视图函数中通过requests.get自我调用导致无限循环,应从request对象中获取POST数据:

from flask import Flask, request, jsonify  # 新增导入request和jsonify

app = Flask(__name__)

# 解决跨域问题(React与Flask端口不同时必须添加)
from flask_cors import CORS
CORS(app)

@app.route('/trade_data', methods=['POST'])
def receive_data():
    # 获取前端发送的JSON数据
    data = request.get_json()
    print("收到的数据:", data)
    # 此处可调用目标Python函数,将data作为参数传入
    # your_python_function(**data)
    return jsonify({"status": "success", "message": "数据已接收"})

if __name__ == '__main__':
    app.run(debug=True)

跨域依赖安装

由于React和Flask运行在不同端口,需安装flask-cors解决跨域问题:

pip install flask-cors

内容的提问来源于stack exchange,提问作者Adam Saleem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:31:06