如何使用ajax请求删除laravel 5.3中的记录?

2022-08-31 00:22:08

我正在尝试在laravel 5.3中使用ajax删除记录,我知道这是常见问题之一,并且已经有很多关于此主题的在线解决方案和教程。我尝试了其中一些,但大多数都给了我同样的错误。我试图从不同的角度完成这项任务,但我卡住了,找不到我错的地方,这就是为什么我添加了这个问题作为指导。NetworkError: 405 Method Not Allowed

我正在尝试按照脚本删除记录。

控制器.php

public function destroy($id)
{   //For Deleting Users
    $Users = new UserModel;
    $Users = UserModel::find($id);
    $Users->delete($id);
    return response()->json([
        'success' => 'Record has been deleted successfully!'
    ]);
}

路线.php

Route::get('/user/delete/{id}', 'UserController@destroy');

在视图中

<button class="deleteProduct" data-id="{{ $user->id }}" data-token="{{ csrf_token() }}" >Delete Task</button>

应用程序.js

$(".deleteProduct").click(function(){
        var id = $(this).data("id");
        var token = $(this).data("token");
        $.ajax(
        {
            url: "user/delete/"+id,
            type: 'PUT',
            dataType: "JSON",
            data: {
                "id": id,
                "_method": 'DELETE',
                "_token": token,
            },
            success: function ()
            {
                console.log("it Work");
            }
        });

        console.log("It failed");
    });

当我点击删除按钮时,它会在控制台中返回我的错误。没有ajax相同的删除功能工作正常。NetworkError: 405 Method Not Allowed

任何人都可以指导我,我错了,我可以解决这个问题,如果有人指导我,我想感激。谢谢。。


答案 1

不使用 。Route::getRoute::delete

除此之外,在ajax调用中更改为。type: 'Put'type: 'DELETE'


附言:此代码

$Users = new UserModel;        // Totally useless line
$Users = UserModel::find($id); // Can chain this line with the next one
$Users->delete($id);

可以写成:

UserModel::find($id)->delete();

甚至更短:

UserModel::destroy($id);

请记住,这将触发事件,而不会触发事件。->delete()::destroy()


答案 2

确保在视图的标记中添加此内容meta

    <meta name="csrf-token" content="{{ csrf_token() }}">

在 中,执行此操作Routes

Route::delete('/user/delete/{id}', 'UserController@destroy');

在控制器中,执行此操作

UserModel::destroy($id);

DB::table('table_name')->where('id', $id)->delete();

确保检查要删除帐户的用户是否实际拥有该帐户,即运行授权测试。

由于这是一个请求,因此您需要像官方网站声明的那样将 与 ajax 标头一起发送。https://laravel.com/docs/5.5/csrf#csrf-x-csrf-tokendeletecsrf_token

确保在 ajax 调用之前添加此内容

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

现在发送请求

$(".deleteProduct").click(function(){
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    $.ajax(
    {
        url: "user/delete/"+id,
        type: 'delete', // replaced from put
        dataType: "JSON",
        data: {
            "id": id // method and token not needed in data
        },
        success: function (response)
        {
            console.log(response); // see the reponse sent
        },
        error: function(xhr) {
         console.log(xhr.responseText); // this line will save you tons of hours while debugging
        // do something here because of error
       }
    });
});

我希望这有帮助。


推荐