【问题标题】:Laravel Ajax delete record with buttonLaravel Ajax 使用按钮删除记录
【发布时间】: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

【问题讨论】:

  • 你用的是什么浏览器?

标签: ajax laravel button


【解决方案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()

【讨论】:

    猜你喜欢
    • 2017-02-19
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多