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

Laravel 8.2中Ajax始终触发success回调无法识别业务错误怎么办

问题原因

jQuery的$.ajax的error回调仅在请求出现网络异常、超时、返回HTTP状态码为4xx/5xx等非成功状态时才会触发。你当前的控制器代码不管业务逻辑成功还是失败,返回的HTTP状态码都是默认的200(成功状态),所以两种情况都会进入success回调。

解决方案

提供两种常用实现方式,任选其一即可:

方案1:后端返回对应业务状态的HTTP状态码(符合RESTful规范)

修改控制器代码,在业务判定失败时返回4xx类状态码,即可触发前端error回调:

public function destroy($id)
{
    $user = User::find($id);
    if($user->type !== 0) {
        $user->delete();
        return response()->json([
            'success'=>"Record deleted."
        ]);
    } else {
        // 第二个参数传入403(禁止访问)状态码
        return response()->json([
            'error' => "You can not delete this"
        ], 403);
    }
}

该方案不需要修改前端原有JS代码,业务失败时会自动触发error回调的提示。

方案2:前端在success回调中判断业务返回字段

不需要修改HTTP状态码,直接在success回调中根据返回的JSON字段判断业务结果,修改JS代码如下:

$(".deleteRecord").click(function(){
    var id = $(this).data("id");
    var token = $("meta[name='csrf-token']").attr("content");
    if(confirm('Do you want to delete?')){
        $.ajax(
            {
                url: "operDel/"+id,
                type: 'post',
                cache: false,
                data: {
                    "id": id,
                    "method": 'post',
                    "_token": token,
                },
                dataType: "json",
                // 接收返回的data参数
                success: function(data) {
                    if(data.success) {
                        alert('Record is deleted');
                    } else if(data.error) {
                        alert(data.error);
                    }
                },
                error: function() {
                    alert('请求发生异常,请检查网络或重试');
                }
            });
    }
});

该方案更灵活,可适配多种业务状态的提示需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:36:06