Laravel Ajax удаляет запись кнопкой - PullRequest
0 голосов
/ 09 ноября 2018

Я не понимаю, почему это не работает:

Маршрут

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

ResourceController

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");
});

У меня есть эта ошибка:

URL запроса: http://pickbooking.local/dashboard/booking/deletebooking/1 Способ запроса: POST Код состояния: 500 Внутренняя ошибка сервера Удаленный адрес: 192.168.10.10:80

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Потому что я думаю, что у вас есть ошибка типа

Метод Illuminate \ Database \ Eloquent \ Collection :: delete не существует.

Вместо этого попробуйте что-то вроде этого

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

так что $booking может иметь метод delete()

0 голосов
/ 09 ноября 2018

Проблема в методе, используемом для вызова 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 тела нет. так что Ларавел не увидит _method или _token. Либо вы отправляете их в GET-запросе и позволяете _method выполнять свою работу (это будет в URL, а не в теле), либо используйте метод DELETE в вызове ajax

// 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");
            }
        });
...