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

Laravel中AJAX删除数据出现CSRF Token Mismatch错误求助

解决Laravel AJAX DELETE请求的CSRF Token Mismatch错误

首先,咱们先揪出你代码里的核心问题:AJAX设置的请求头键名写错了。Laravel要求的CSRF验证头是X-CSRF-TOKEN(横杠分隔),但你写成了X_CSRF_TOKEN(下划线分隔),这就是导致令牌不匹配的主要原因。

下面给你一步步修正和优化的方案:

方案一:修正请求头键名

把$.ajaxSetup里的headers键改成正确格式,这是最直接的修复方式:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

修改后,你的AJAX请求就能正确携带Laravel需要的CSRF令牌了。

方案二:直接在请求数据中传入令牌

如果你不想设置全局的ajaxSetup,也可以把CSRF令牌直接放到请求的data参数里:

$('.deletePhoto').click(function () {
    var id = $(this).data('id');
    var el = this;
    $.ajax({
        url: '/photo/delete/'+id,
        type: 'DELETE',
        dataType: 'JSON',
        data: {
            '_token': $('meta[name="csrf-token"]').attr('content'),
            'id': id
        },
        success: function () {
            $(el).closest(".photo-details").remove();
            console.log('DELETED');
        },
        error: function (xhr) {
            console.log(xhr.responseText);
        }
    })
});

这种方式同样能让Laravel正确验证CSRF令牌。

额外优化建议

  • 你页面头部的<meta name="csrf-token" content="{{ csrf_token() }}">是正确的,不用改动。
  • Blade按钮里的data-token其实可以去掉,因为已经通过meta标签获取令牌了,留着也不影响,但没必要冗余。
  • 控制器的destroy方法可以加个容错处理,避免找不到对应ID的照片时报错:
public function destroy($id) {
    $photo = Photo::findOrFail($id);
    $photo->delete();
    return response()->json(['success' => true]);
}

用findOrFail会自动返回404响应,同时返回JSON数据让前端更易处理请求结果。

这样调整后,你的AJAX删除请求应该就能正常工作,不会再出现CSRF Token Mismatch的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:30