如何在AJAX响应中批量删除表格内已移除数组ID对应的行?
具体实现方案
1. 修复PHP代码问题(含SQL注入漏洞修复+返回值优化)
你原有的PDO拼接SQL的写法存在严重的SQL注入风险,同时返回值仅返回文本提示,不利于前端判断操作状态,修改后代码如下:
if(isset($_POST['del']) && is_array($_POST['del'])) { $error = ''; $delIds = array_map('intval', $_POST['del']); // 强制转成整数,避免注入 $placeholders = rtrim(str_repeat('?,', count($delIds)), ','); // 生成参数占位符 // 先查询头像删除 $stmt = $pdo->prepare('SELECT img FROM users WHERE user_id IN (' . $placeholders . ')'); $stmt->execute($delIds); while ($row = $stmt->fetch()) { @unlink('../images/avatars/' . $row["img"]); } // 删除用户数据 $stmt = $pdo->prepare('DELETE FROM users WHERE user_id IN (' . $placeholders . ')'); $delStatus = $stmt->execute($delIds); // 返回结构化数据,包含操作状态和成功删除的ID echo json_encode([ 'code' => $delStatus ? 1 : 0, 'msg' => $delStatus ? '删除成功' : '删除失败,请稍后重试', 'del_ids' => $delStatus ? $delIds : [] ]); }
2. 修改AJAX回调逻辑,批量删除表格行
你在请求发送前已经获取到了所有要删除的ID数组,也可以直接复用该数组遍历删除,配合后端返回的状态判断后操作更稳妥,修改后JS代码如下:
$(document).on('click','[data-bs-target="#deleteAll"]',function(event){ event.preventDefault(); var del = []; $("input[name='del[]']:checked").each(function(){ del.push($(this).val()); }); if(del.length === 0){ alert('请先选择要删除的用户'); return; } if(confirm("确定要删除选中的用户吗?")){ $.ajax({ url:"modules/mod_users.php", method:"POST", data:{del:del}, dataType:"JSON", success:function(res){ if(res.code === 1){ // 批量删除对应行 res.del_ids.forEach(function(id){ $("#"+id).closest('tr').remove(); }); alert(res.msg); }else{ alert(res.msg); } }, error:function(){ alert('请求出错,请稍后重试'); } }); } });
注意事项
- 确保你表格中每行的对应元素ID和user_id完全对应,和你之前单条删除时用的
$("#"+id).closest('tr').remove()逻辑保持一致即可 - 如果你的表格行本身ID就是user_id,可以直接简化为
$('tr#'+id).remove(),不需要再找父元素
内容的提问来源于stack exchange,提问作者user1805543
相关产品推荐
相关产品推荐

