如何通过AJAX一次性将多个选中的Checkbox数据发送到PHP
解决方案
你原来的代码是把AJAX请求写在了each遍历的循环体内,所以每处理一行选中数据就会发起一次请求,要批量发送只要把请求移到循环外,先收集所有数据再统一发送即可。
具体修改步骤
- 先在遍历开始前定义一个空数组,用来存储所有选中行的数据集
- 公共参数
tgl不用在循环内重复获取,提前拿到即可减少冗余操作 - 遍历每一行选中项的时候,把单条数据组装成对象push到数组里
- 遍历完成后只发起一次AJAX请求,把整个数组和公共参数一起传给后端
修改后的代码
$('#lunas').click(function(){ // 提前获取公共参数 不用在循环内重复读取 const tgl = document.getElementById('tgl').value; // 定义空数组存储所有选中数据 const dataList = []; $('#tampilkan tbody input:checked').each(function(){ const tr = $(this).closest('tr')[0]; // 组装单条行数据 const rowData = { nosam: tr.cells[1].innerHTML, unit: tr.cells[2].innerHTML, blthn: tr.cells[8].innerHTML, dd: Number(hapusTitik(tr.cells[9].innerHTML)), rp: Number(hapusTitik(tr.cells[10].innerHTML)) }; // 将单条数据推入数组 dataList.push(rowData); }); // 所有数据收集完成后 只发起一次AJAX请求 $.ajax({ url: 'get/penjualan_simpan.php', method: 'POST', // 建议指定POST方式 避免GET传参长度限制 data: { data_list: dataList, tgl: tgl }, cache: false, success: function(data){ $('#modalByar').modal('hide'); } }); });
PHP端接收处理示例
后端的penjualan_simpan.php可以直接遍历接收的数组批量处理即可:
<?php // 接收前端传参 $tgl = $_POST['tgl']; $dataList = $_POST['data_list']; // 遍历所有数据执行业务逻辑 比如批量写入数据库 foreach ($dataList as $item) { $nosam = $item['nosam']; $unit = $item['unit']; $blthn = $item['blthn']; $dd = $item['dd']; $rp = $item['rp']; // 此处写你的业务逻辑 比如SQL插入/更新操作 // 推荐使用预处理语句 避免SQL注入风险 } // 返回处理响应 echo json_encode(['code' => 200, 'msg' => '批量处理完成']); ?>
内容的提问来源于stack exchange,提问作者Riansyah Jalil
相关产品推荐
相关产品推荐

