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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:48:04