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

Laravel中Datatable通过Ajax执行邮件删除操作无法获取数据求助

问题修复方案

以下是代码中的所有问题点和对应修改方法:

1. 修复路由类型&请求方式匹配问题

当前路由定义为GET请求,但删除操作建议用POST,同时需要兼容Laravel的csrf校验规则:

  • 路由修改为POST类型:
Route::post('delete-subscriber', 'SubscriberController@ajaxDelete')->name('subscribers.ajaxdelete');

2. 修复Ajax代码的多个错误

  • 修正mehtod拼写错误为method
  • 补充csrf参数(Laravel POST请求必须传递该参数,否则会触发权限拦截)
  • 调整传参格式为控制器要求的ids数组,和旧版正常逻辑保持一致
    修正后的JS代码:
$('#table').on('click', '.delete-subscriber', function(e){
    e.preventDefault();
    var sid = $(this).attr('id');
    if(confirm("Are you sure you want to Delete this data?")) {
        $.ajax({
            url:"{{ route('subscribers.ajaxdelete')}}",
            method:"post",
            data: {
                _token: "{{ csrf_token() }}",
                ids: [sid] // 传递数组格式,匹配控制器的判断逻辑
            },
            success: function(response){
                alert("Record deleted.");
                $('#table').DataTable().ajax.reload();
            }
        })
    }
    return false;
});

3. 修复控制器的逻辑&返回问题

当前控制器的判断条件通过后没有规范返回,还有多余的无效代码块,修正后逻辑如下:

public function ajaxDelete(Request $request)
{
    $data = $request->all();
    $deleted = false;
    $idCnt = 0;
    if (isset($data['ids']) && is_array($data['ids']) && count($data['ids']) > 0) {
        foreach ($data['ids'] as $id) {
            $subscriber = Subscriber::find($id);
            if (!empty($subscriber) && $this->user->canDeleteSubscriber($subscriber)) {
                $subscriber->delete();
                $deleted = true;
                $idCnt++;
            }
        }
    }
    // 返回JSON格式响应更适配Ajax场景
    return response()->json([
        'code' => 200,
        'deleted' => $deleted,
        'count' => $idCnt
    ]);
}

修改完以上三点即可正常实现删除功能,核心故障原因是前端传递的参数和控制器判断的参数名、格式不匹配,导致删除逻辑压根没有触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:57:02