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

Laravel+JavaScript批量删数据库行时页面无法刷新问题求助

问题分析与解决方案

嘿,我看了你的代码和错误截图,发现核心问题出在控制器响应类型不匹配,还有一处查询逻辑的小疏漏,导致JS报错、页面无法正常更新。我帮你一步步修正:

1. 修正控制器的响应与查询逻辑

你现在的控制器删除数据后返回了重定向,但AJAX请求不会自动跳转页面,反而会把重定向的HTML页面当成响应内容,导致前端JS无法解析出预期的data.success字段,直接触发报错。同时,批量删除的查询写法也有误,应该用whereIn来匹配多个ID:

public function deleteAllSelected(Request $request) {
    $ids = $request->ids;
    // 修正:用whereIn匹配多个ID,原写法的where无法批量匹配
    Video::whereIn('id', explode(",", $ids))->delete();
    
    // 返回JSON响应,而非重定向,适配AJAX请求的解析需求
    return response()->json([
        'success' => 'Video(s) deleted successfully!'
    ]);
}

2. 调整前端JavaScript逻辑

原来的JS里已经写了移除选中行的代码,但因为控制器响应错误没执行。另外还有一段重复的行移除代码可以删掉,避免冗余:

$('.delete_all').on('click', function(e) {
    var allVals = [];
    $(".sub_chk:checked").each(function() {
        allVals.push($(this).attr('data-id'));
    });
    if(allVals.length <=0) {
        alert("Please select videos.");
    } else {
        var check = confirm("Are you sure you want to delete this ?");
        if(check == true){
            var join_selected_values = allVals.join(",");
            $.ajax({
                url: $(this).data('url'),
                type: 'DELETE',
                headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
                data: { ids: join_selected_values }, // 改成对象格式更规范
                success: function (data) {
                    if (data.success) {
                        // 移除选中的表格行
                        $(".sub_chk:checked").parents("tr").remove();
                        alert(data.success);
                        // 如果需要同步更新分页数据,可添加页面刷新(可选)
                        // window.location.reload();
                    } else if (data.error) {
                        alert(data.error);
                    } else {
                        alert('Whoops Something went wrong!!');
                    }
                },
                error: function (xhr) {
                    alert(xhr.responseText);
                }
            });

            // 删掉这段重复的行移除代码,上面的逻辑已经处理完成
            // $.each(allVals, function( index, value ) {
            //     $('table tr').filter("[data-row-id='" + value + "']").remove();
            // });
        }
    }
});

3. 额外小优化

如果删除后需要同步更新分页栏(比如删除后分页数量减少),可以在AJAX成功回调里加上window.location.reload(),强制刷新页面展示最新数据;如果不需要刷新,仅移除当前行也能正常展示剩余数据。

这样修改后,批量删除功能就能正常工作:数据成功删除,前端正确移除对应行,不会再出现JS错误,也能看到更新后的列表啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:00:51