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

如何通过Ajax向PHP提交多组表单数据并分别存储为JSON文件

实现方案

第一步:调整HTML表单结构

首先给每组日期的输入项包裹分组容器,同时将输入框的name属性改为数组格式,避免同名参数覆盖:

<!-- 每天一组,共31组 -->
<div class="day-item">
  <input type="text" value="2021-05-01" class="date" name="startdate[]">                        
  <input type="text" value="10:00" class="starttime" name="starttime[]">                        
  <input type="text" value="17:00" class="endtime" name="endtime[]">                        
  <input type="text" value="7" class="hours" name="total[]">
</div>
<div class="day-item">
  <input type="text" value="2021-05-02" class="date" name="startdate[]">                        
  <input type="text" value="11:00" class="starttime" name="starttime[]">                        
  <input type="text" value="17:00" class="endtime" name="endtime[]">                        
  <input type="text" value="6" class="hours" name="total[]">
</div>
<!-- 剩余日期按相同格式补充 -->

第二步:修改前端Ajax提交逻辑

遍历所有分组,批量组装数据后一次性提交,同时修正原有代码的语法错误:

// 初始化批量数据数组
let daysData = [];
// 遍历每天的分组
$('.day-item').each(function() {
  let item = {
    date: $(this).find('.date').val(),
    starttime: $(this).find('.starttime').val(),
    endtime: $(this).find('.endtime').val(),
    hours: $(this).find('.hours').val()
  };
  daysData.push(item);
});

// 批量提交
$.ajax({
  url: 'process.php',
  data: { days: daysData },
  type: "POST",
  success: function (data) {          
    $('.response').html(data);
  }
});

第三步:调整PHP后端处理逻辑

接收批量数据后循环处理,复用原有单条存储逻辑即可,同时修正原代码里ID拼接重复的问题:

<?php
// 先检查存储目录是否存在,不存在则创建
if (!is_dir('data')) {
  mkdir('data', 0755, true);
}

$successCount = 0;
$failCount = 0;
// 接收批量数据
$daysList = $_POST['days'] ?? [];

foreach ($daysList as $item) {
  $maydata = [];
  $maydata['date'] = $item['date'];
  $maydata['starttime'] = $item['starttime'];
  $maydata['endtime'] = $item['endtime'];
  $maydata['hours'] = $item['hours'];

  // 修正原逻辑重复拼接date的问题,生成符合要求的文件名
  $id = 'id_' . str_replace('-', '', $maydata['date']);
  $file = 'data/' . $id . '.json';
  $jsonData = json_encode($maydata, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);
  
  if (file_put_contents($file, $jsonData)) {
    $successCount++;
  } else {
    $failCount++;
  }
}

echo "数据处理完成:成功存储{$successCount}条,失败{$failCount}条";
?>

补充说明

  • 调整后生成的单个JSON文件结构和原有格式完全一致,不需要修改后续的读取逻辑
  • 提交时仅发送一次请求,相比循环提交31次性能更高,也不会出现请求并发问题
  • 增加了目录自动创建和成功失败统计,方便排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:15:02