Ajax 在 Laravel 中只获得成功响应

Posted

技术标签:

【中文标题】Ajax 在 Laravel 中只获得成功响应【英文标题】:Ajax gets only success response in Laravel 【发布时间】:2021-12-20 00:08:14 【问题描述】:

即使出现错误,我的 ajax 代码也总是会收到成功响应。 我正在使用 Laravel 8.2。

这里是 javascript

    $(".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",
                success: function() 
                    alert('Record is deleted'); // I getting only this alert
                ,
                error: function() 
                    alert('You can not delete this record');
                
            );
    
);

这是路线

Route::post('operDel/id', '\App\Http\Controllers\OperationController@destroy')->name('operDel')->middleware('auth');

这是控制器

    public function destroy($id)


    $user = User::find($id);
    if($user->type !== 0) 
            $user->delete();
            return response()->json([
                'success'=>"Record deleted."
            ]);
    
    else
        return response()->json([
            'error' => "You can not delete this"
        ]);
    

控制器运行正常,$user-> 类型时它从数据库中删除了记录! == 0。 但我只在成功功能中收到警报。 如何显示警报响应消息?

【问题讨论】:

您的问题是您没有按照应有的方式使用框架,您应该使用Gates 来授权请求​​并使用Form Requests 来执行此操作......最重要的是您阅读了整个文档,因此您可以知道该框架提供了什么... 【参考方案1】:

您需要发送错误响应代码,以便 AJAX 将响应视为失败,例如:

public function destroy($id)


    $user = User::find($id);
    if($user->type !== 0) 
            $user->delete();
            return response()->json([
                'success'=>"Record deleted."
            ]);
    
    else
        return response()->json([
            'error' => "You can not delete this"
        ], 400); // 400 means bad request
    

发送一个超过 400 的响应代码将使 AJAX 明白存在错误。

【讨论】:

400401(未授权)或 403(禁止)

以上是关于Ajax 在 Laravel 中只获得成功响应的主要内容,如果未能解决你的问题,请参考以下文章

如果验证失败/成功,Laravel 会更改响应标头

laravel ajax 成功后如何刷新数据表?

没有使用 mamp 获得 ajax 成功响应

Laravel 在 Ajax 响应中返回一个视图

如何在laravel 5.2中控制多个ajax请求

如何获得我的AJAX响应以执行点击事件?