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

新手上路,请多包涵

我正在尝试在 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");
    });

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

任何人都可以指导我在哪里我可以解决这个问题,如果有人就此指导我,我将不胜感激。谢谢你..

原文由 Ayaz Ali Shah 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 286
2 个回答

而不是使用 Route::get 使用 Route::delete

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


PS这段代码

$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() 则不会。

原文由 siannone 发布,翻译遵循 CC BY-SA 4.0 许可协议

确保将此添加到视图的 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();

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

由于它是一个 delete 请求,您需要发送 csrf_token 以及您的 ajax 标头,如官方网站所述。 https://laravel.com/docs/5.5/csrf#csrf-x-csrf-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
       }
    });
});

我希望这有帮助。

原文由 Koushik Das 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏