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

如何通过JS向Python Flask服务器传递数组并保留结构?

解决JavaScript向Flask传递数组时变为字符串的问题

问题原因

直接将数组拼接到GET请求的URL中时,JavaScript会自动调用数组的toString()方法,把数组转为逗号分隔的字符串,因此Flask端接收到的是字符串而非数组结构。

解决方案

方案1:GET请求中正确传递数组

通过重复参数名的格式传递数组,Flask端用getlist()方法直接获取列表。

前端代码修改

function getClassification()
{
  const modulesArray = [
    document.getElementById('module_1').value,
    document.getElementById('module_2').value,
    document.getElementById('module_3').value,
    document.getElementById('module_4').value,
    document.getElementById('module_5').value
  ]
  const marksArray = [
    document.getElementById('mark_1').value,
    document.getElementById('mark_2').value,
    document.getElementById('mark_3').value,
    document.getElementById('mark_4').value,
    document.getElementById('mark_5').value
  ]
  // 将数组转成重复参数格式:modules=xxx&modules=xxx...
  const modulesParams = modulesArray.map(item => `modules=${encodeURIComponent(item)}`).join('&');
  const marksParams = marksArray.map(item => `marks=${encodeURIComponent(item)}`).join('&');
  const fullURL = `${classifyModulesURL}?${modulesParams}&${marksParams}`;

  let xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      var j = JSON.parse(this.response);
    }
  };
  xhttp.open("GET", fullURL);
  xhttp.send();
  return;
}

Flask后端代码修改

modules = request.args.getlist('modules')  # 直接获取列表类型
marks = request.args.getlist('marks')
print(modules)
print(type(modules))  # <class 'list'>
# 若需要将分数转为整数
marks = list(map(int, marks))

方案2:用POST请求发送JSON数据(更适合复杂数据)

将数组包装为JSON对象发送,Flask端直接解析JSON获取数组。

前端代码修改

function getClassification()
{
  const modulesArray = [
    document.getElementById('module_1').value,
    document.getElementById('module_2').value,
    document.getElementById('module_3').value,
    document.getElementById('module_4').value,
    document.getElementById('module_5').value
  ]
  const marksArray = [
    document.getElementById('mark_1').value,
    document.getElementById('mark_2').value,
    document.getElementById('mark_3').value,
    document.getElementById('mark_4').value,
    document.getElementById('mark_5').value
  ]
  let xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      var j = JSON.parse(this.response);
    }
  };
  xhttp.open("POST", classifyModulesURL);
  // 设置请求头为JSON格式
  xhttp.setRequestHeader("Content-Type", "application/json");
  // 转成JSON字符串发送
  const requestData = JSON.stringify({
    modules: modulesArray,
    marks: marksArray
  });
  xhttp.send(requestData);
  return;
}

Flask后端代码修改

from flask import request

# 解析JSON请求体
request_data = request.get_json()
modules = request_data['modules']
marks = request_data['marks']
print(type(modules))  # <class 'list'>
# 分数转整数
marks = list(map(int, marks))

内容的提问来源于stack exchange,提问作者Desiree Armfelt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:30:29