CodeIgniter 3批量删除订单功能失效求助:无报错但订单未删除
批量删除订单功能排查与修复
1. 修复复选框重复name属性问题
你的单行复选框代码重复定义了name属性,浏览器会忽略第一个name="checkbox-table",仅保留name="checkAll",导致JS选择器input[name='checkbox-table']无法选中任何复选框,最终order_ids为空数组,删除逻辑根本未执行。
原错误代码:
<th scope="row"> <div class="form-check"> <input class="form-check-input fs-15" name="checkbox-table" type="checkbox" name="checkAll" value="<?php echo $item->id; ?>"> </div> </th>
修复后代码:
<th scope="row"> <div class="form-check"> <input class="form-check-input fs-15" name="checkbox-table" type="checkbox" value="<?php echo $item->id; ?>"> </div> </th>
2. 补充全选复选框交互逻辑
你已添加全选复选框,但未实现全选/取消全选功能,需补充对应JS代码:
$('#checkAll').on('change', function() { $('input[name="checkbox-table"]').prop('checked', $(this).is(':checked')); });
3. 增强AJAX请求的调试与容错
当前AJAX仅处理成功回调,无错误处理逻辑,无法排查请求是否失败。建议添加错误回调,并在成功回调中打印响应内容,确认后端是否接收参数:
$.ajax({ type: "POST", url: base_url + "order_admin_controller/delete_selected_orders", data: data, success: function (response) { console.log('后端响应:', response); // 调试用,确认执行状态 location.reload(); }, error: function(xhr, status, error) { console.error('请求错误:', status, error); // 排查请求失败原因 swal('错误', '删除请求失败,请重试', 'error'); } });
4. 后端参数校验增强
在控制器中添加参数非空校验,避免空数组传入模型:
public function delete_selected_orders() { $order_ids = $this->input->post('order_ids', true); // 校验参数有效性 if (!empty($order_ids) && is_array($order_ids)) { $this->order_admin_model->delete_multi_orders($order_ids); reset_cache_data_on_change(); echo json_encode(['status' => 'success']); } else { echo json_encode(['status' => 'error', 'msg' => '未选择任何订单']); } }
5. 模型层批量删除优化(可选)
当前模型循环调用单个删除函数效率较低,可改为批量删除逻辑,减少数据库交互次数:
public function delete_multi_orders($order_ids) { if (!empty($order_ids) && is_array($order_ids)) { // 批量删除订单商品 $this->db->where_in('order_id', $order_ids)->delete('order_products'); // 批量删除发票 $this->db->where_in('order_id', $order_ids)->delete('invoices'); // 批量删除订单 return $this->db->where_in('id', $order_ids)->delete('orders'); } return false; }
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

