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

如何为Express API的AJAX请求正确传递参数

问题原因及修复方案

核心问题1:循环覆盖sessionStorage存储值

你在parsedData.data.rows的遍历循环里,每次迭代都会调用sessionStorage.setItem("user", JSON.stringify(userData)),后一次的存储值会直接覆盖前一次的,最终sessionStorage里只会保留遍历到最后一条数据对应的userData。当你点击非最后一条生成的卡片时,要么拿到的是错误的其他数据,要么如果最后一条数据的master_id本身为空,就会出现pid为undefined的情况。

核心问题2:AJAX请求配置不符合后端接收规则

你当前的AJAX配置没有指定请求头的Content-Type,jQuery默认会将对象格式的data转为application/x-www-form-urlencoded格式的参数,如果你后端Express接口是按JSON格式解析请求体的,就会取不到参数,返回400错误。

修复代码

第一步:修改循环渲染逻辑,给点击事件传当前行的参数

不用依赖全局共享的sessionStorage,直接把当前卡片对应的数据作为参数传给点击事件:

const parsedData = JSON.parse(localStorage.getItem('myData'));
const container = document.getElementById('s1');
// 先清空容器,避免重复拼接
container.innerHTML = '';

parsedData.data.rows.forEach((result, idx) => {
  const a = result.master_id;
  const b = result.session_name;
  // 可先查看遍历过程中a、b是否有有效值,排除原始数据字段缺失问题
  console.log('当前遍历参数:', a, b);
  const userData = {"pid":a,"session" :b};
  
  const card = document.createElement('div');
  card.classList = 'card';
  // 直接把当前行的userData作为参数传给graphApi
  const content = `
  <div class="row">
      <div class="card-body" onclick='graphApi(${JSON.stringify(userData)})'>
      </div>
  </div>
  `;
  // 推荐用appendChild而非innerHTML+=,避免之前的DOM节点被意外重置
  const tempDiv = document.createElement('div');
  tempDiv.innerHTML = content;
  card.appendChild(tempDiv.firstElementChild);
  container.appendChild(card);
});

第二步:修改graphApi函数,接收参数并调整AJAX配置

function graphApi(userData){
  // 直接使用传入的参数,无需读取sessionStorage
  console.log('当前请求参数:', userData);
  $.ajax({
    type: "POST",
    // 指定请求体为JSON格式
    contentType: "application/json; charset=utf-8",
    // 把参数转为JSON字符串
    data: JSON.stringify(userData),
    dataType:"json",
    url: "http://localhost:5000/graphFromcsv",                      
    success: function(data) {
      console.log(data,"graph api");
      // 此处写入你后续绘制多折线图的逻辑
    },
    error: function(err){
      alert("graph api failed to load");
      console.log(err);
    },
  });
}

额外检查项

确认你的Express入口文件已经配置了JSON解析中间件,否则后端无法识别前端发送的JSON格式请求体:

// Express入口文件添加该行
app.use(express.json())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:09:03