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

如何通过JavaScript Fetch API将HTML端XML文件发送到Python Flask后端

代码调整方案

1. 前端代码修改

1.1 HTML部分(无核心错误,仅确认ID一致即可)

<input type="file" id="files"  class="form-control" accept=".xml" required />
<button onclick="send()" style="width: 150px;" class="btn btn-primary">Send</button>

1.2 JavaScript部分修正

原JS存在DOM ID写错、直接传递DOM元素而非文件内容、请求URL缺少协议头、错误携带仅后端需要返回的CORS头的问题,修正后代码如下:

function send() {
    // 匹配HTML的id属性值获取文件选择框
    const fileInput = document.getElementById("files");
    if (!fileInput.files.length) {
        alert("请先选择XML文件");
        return;
    }
    // 读取XML文件内容
    const reader = new FileReader();
    reader.onload = function(e) {
        const xmlContent = e.target.result;
        // 替换为你后端实际运行的地址+端口,不要遗漏http://协议头
        fetch('http://localhost:3000/Students', {
            method: 'POST',
            body: xmlContent,
            headers:{
                'Content-Type': 'application/xml'
            }
        })
        .then(res => res.json())
        .catch(err => {
                console.error('Error:', err)
                alert("发送出错,详见控制台")
        })
        .then(response =>{
          console.log(response);
          alert(response.Mensaje)
        })
    };
    reader.readAsText(fileInput.files[0]);
}

2. 后端Flask代码修正

原后端存在变量名拼写错误、缺少跨域支持的问题,修正后代码如下:

from flask import Flask, request, jsonify
from flask_cors import CORS
import xml.etree.ElementTree as ET

app = Flask(__name__)
# 开启跨域支持,解决前端跨域请求报错
CORS(app)

# 此处为你定义的DataObject类,根据实际逻辑调整
class DataObject:
    def __init__(self, name, address):
        self.name = name
        self.address = address

dataArray = []

@app.route('/Students', methods=['POST'])
def loaddata():
    global dataArray
    entry= request.data.decode('utf-8')
    xmlentry= ET.fromstring(entry)
    # 修正原代码的变量名错误:dte改为循环变量student,address拼写修正
    for student in xmlentry.findall('STUDENT'):
        name= student.find('NAME').text
        address = student.find('ADDRESS').text
        new = DataObject(name,address)
        dataArray.append(new)
    return jsonify({'Mensaje':'Students added to the database',})

if __name__ == '__main__':
    # 端口和前端请求的3000保持一致,或修改前端请求端口为实际后端端口
    app.run(port=3000, debug=True)

注意事项

  • 启动后端前先安装依赖:pip install flask flask-cors
  • 确认XML文件结构符合解析逻辑,根节点下直接为STUDENT节点,且包含NAME、ADDRESS子节点

内容的提问来源于stack exchange,提问作者Luis MC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:06:05