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
相关产品推荐
相关产品推荐

