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

如何生成可通过AJAX提交的多维JavaScript数组

解决方案

核心问题说明

你之前用数组存储数据是错误的——数组只能用数字索引,而你需要用Client ID和trener_id作为字符串键,必须用普通对象来构建结构,这样才能正确序列化并通过AJAX提交。

正确的数据结构示例

最终生成的结构应该是嵌套对象+数组的组合,示例如下:

{
  "client_1001": {
    "trener_2001": [
      { "service_id": 3001, "client_price": 150, "trener_bonus": 30 },
      { "service_id": 3002, "client_price": 200, "trener_bonus": 40 }
    ],
    "trener_2002": [
      { "service_id": 3003, "client_price": 180, "trener_bonus": 35 }
    ]
  },
  "client_1002": {
    "trener_2001": [
      { "service_id": 3004, "client_price": 120, "trener_bonus": 25 }
    ]
  }
}

修正后的代码实现

假设你的表格选中行带有.selected-service类,且数据通过data-*属性或表单控件存储:

// 初始化空对象存储最终数据
const clientServiceData = {};

// 遍历所有选中的服务行
document.querySelectorAll('.selected-service').forEach(row => {
  // 从行中提取所需数据(根据你的实际DOM结构调整取值方式)
  const clientId = row.dataset.clientId; // 对应data-client-id属性
  const trenerId = row.dataset.trenerId; // 对应data-trener-id属性
  const serviceId = parseInt(row.querySelector('[name="service_id"]').value);
  const clientPrice = parseFloat(row.querySelector('[name="client_price"]').value);
  const trenerBonus = parseFloat(row.querySelector('[name="trener_bonus"]').value);

  // 确保当前客户的对象存在
  if (!clientServiceData[clientId]) {
    clientServiceData[clientId] = {};
  }

  // 确保当前教练的服务数组存在
  if (!clientServiceData[clientId][trenerId]) {
    clientServiceData[clientId][trenerId] = [];
  }

  // 将当前服务信息推入对应数组
  clientServiceData[clientId][trenerId].push({
    service_id: serviceId,
    client_price: clientPrice,
    trener_bonus: trenerBonus
  });
});

// 序列化为JSON字符串
const submitData = JSON.stringify(clientServiceData);

// AJAX提交(jQuery示例)
$.ajax({
  url: '/your-submit-endpoint',
  method: 'POST',
  data: submitData,
  contentType: 'application/json', // 必须设置这个头部,服务器才能正确解析JSON
  success: function(res) {
    // 处理成功逻辑
    console.log('提交成功', res);
  },
  error: function(xhr) {
    // 处理错误逻辑
    console.error('提交失败', xhr.responseText);
  }
});

关键注意点

  • 不要用数组存储Client ID或trener_id对应的键值对,必须用普通对象。
  • AJAX提交时必须设置contentType: 'application/json',否则服务器可能无法识别JSON格式的请求体。
  • 确保所有数值类型数据(如service_id、价格)转换为正确的类型(数字),避免序列化后变成字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:30:25