Laravel Ajax 使用按钮删除记录

Posted

技术标签:

【中文标题】Laravel Ajax 使用按钮删除记录【英文标题】:Laravel Ajax delete record with button 【发布时间】:2019-04-12 21:47:51 【问题描述】:

我不明白为什么它不起作用:

路线

Route::delete('/dashboard/booking/deletebooking/id','ResourceController@deletebooking')->name('works.deletebooking');

资源控制器

public function deletebooking($id)
    $booking = Booking::where('id','=',$id)->get();
    $booking->delete();

    return response()->json(['success' => true],200);

表格

<tr id="$booking->id">
    <td class="roomId">$booking->room_id</td>
    <td class="roomName">$booking->name</td>
    <td class="roomLocation">$booking->sede</td>
    <td class="start">$booking->start_date</td>
    <td class="end">$booking->end_date</td>
    <td>
        <input type="hidden" name="_method" value="delete" />
        <button class="btn btn-danger btn-xs" id="destroy" data-id="$booking->id" data-token=" csrf_token() ">
            <span class="glyphicon glyphicon-trash"></span>
        </button>
    </td>
</tr>

请求 Ajax

$(".btn").click(function()
    var id = $(this).data('id');

   // var $tr = $(this).closest('tr');
    $.ajax(
                url: "/dashboard/booking/deletebooking/"+id,
                dataType: "JSON",
                type: 'POST',
                data: 
                    '_token': $('meta[name=csrf-token]').attr("content"),
                    '_method': 'DELETE',
                     "id": id
                ,
                success: function ()
                
                    console.log("it Work");
                
            );

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

我有这个错误:

请求网址:http://pickbooking.local/dashboard/booking/deletebooking/1 请求方法:POST 状态码:500 内部服务器错误 远程地址:192.168.10.10:80

【问题讨论】:

你用的是什么浏览器? 【参考方案1】:

问题在于用于 ajax 调用的方法post

// var $tr = $(this).closest('tr');
$.ajax(
        
            url: "/dashboard/booking/deletebooking/"+id,
            dataType: "JSON",
            type: 'POST',
            data: 
                '_token': $('meta[name=csrf-token]').attr("content"),
                '_method': 'DELETE',
                 "id": id
            ,
            success: function ()
            
                console.log("it Work");
            
        );

数据将在请求的正文中发送,而在 DELETE 请求中,没有正文。所以 laravel 不会看到 _method_token。您可以在 GET 请求中发送它们并让 _method 完成它的工作(它将在 url 中,而不是在正文中),或者在 ajax 调用中使用 DELETE 方法

// var $tr = $(this).closest('tr');
$.ajax(
        
            url: "/dashboard/booking/deletebooking/"+id,
            dataType: "JSON",
            type: 'DELETE',
            data: 
                '_token': $('meta[name=csrf-token]').attr("content"),
            ,
            success: function ()
            
                console.log("it Work");
            
        );

【讨论】:

我按照你的建议使用了 ajax 请求,但我有同样的错误 你试过GET method吗?正如@Fil 所注意到的,使用-&gt;first(); 而不是-&gt;get()【参考方案2】:

因为我认为你有类似的错误

方法 Illuminate\Database\Eloquent\Collection::delete 不存在。

不如试试这样的

$booking = Booking::where('id', '=', $id)->first();
$booking->delete();

这样$booking 可以有方法delete()

【讨论】:

以上是关于Laravel Ajax 使用按钮删除记录的主要内容,如果未能解决你的问题,请参考以下文章

Laravel dosent 通过 ajax 删除记录?

使用 AJAX 在 Laravel 5.3 中删除记录

laravel 中删除多条记录

从数据库中删除记录的Ajax脚本不工作。

Laravel 中的 Ajax 删除

laravel 无法删除记录