1

我现在使用 Laravel 5.4 和 Yajra Datatables 插件。一切正常,但删除不起作用。我的网址是这样的... http://localhost:8000/admin/view/%7B%7B%20route ('admin.faculty.destroy',%20$faculties-%3Eid)%20%7D%7D

这是我的控制器:

public function getFacultiesData()
{
    $faculties = faculty::select(['id','name','designation','email','mobile', 'updated_at']);
    return Datatables::of($faculties)
    ->addColumn('action', function ($faculties) {
            return '<a href="/admin/faculty/'.$faculties->id.'/edit" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Edit</a>
                <form class="form-group" action="{{ route(\'admin.faculty.destroy\', $faculties->id) }}" method="POST">
                    <input type="hidden" name="_method" value="DELETE">
                    <button class="btn btn-xs btn-danger"><i class="glyphicon glyphicon-trash"></i>Delete</button>
                </form>    ';})
        ->editColumn('updated_at', function ($faculties) {
            return $faculties->updated_at->diffForHumans();
        })
        ->filterColumn('updated_at', function ($query, $keyword) {
            $query->whereRaw("DATE_FORMAT(updated_at,'%Y/%m/%d') like ?", ["%$keyword%"]);
        })
        ->make(true);
}

这是我的js

$(function() {
$('#faculties-table').DataTable({
    processing: false,
    serverSide: true,
    ajax:'http://localhost:8000/admin/get/faculties/data',
    columns: [
    {data: 'name'},
    {data: 'designation'},
    {data: 'email'},
    {data: 'mobile'},
    {data: 'updated_at'},
    {data: 'action', name: 'action', orderable: false, searchable: false}
    ]});
});

编辑工作完美

4

3 回答 3

3

我已经解决了。在控制器中,我只是使用<button class="btn btn-xs btn-danger btn-delete" data-remote="/admin/faculty/' . $faculties->id . '"><i class="glyphicon glyphicon-trash"></i>Delete</button>而不是表单。并在查看页面上使用 ajax 调用

$('#faculties-table').on('click', '.btn-delete[data-remote]', function (e) { 
    e.preventDefault();
     $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    var url = $(this).data('remote');
    // confirm then
    if (confirm('Are you sure you want to delete this?')) {
        $.ajax({
            url: url,
            type: 'DELETE',
            dataType: 'json',
            data: {method: '_DELETE', submit: true}
        }).always(function (data) {
            $('#faculties-table').DataTable().draw(false);
        });
    }else
        alert("You have cancelled!");
});
于 2017-10-02T18:52:57.577 回答
2

你可以试试这个。只需删除 Form 并用此代码替换它

<a href="'. route('admin.faculty.destroy', $faculties->id) .'" class="btn btn-xs btn-danger"><i class="glyphicon glyphicon-trash"></i> Delete</a>

你的 api 控制器必须是这样的。

 public function getFacultiesData()
    {
        $faculties = faculty::select(['id','name','designation','email','mobile', 'updated_at']);
        return Datatables::of($faculties)
        ->addColumn('action', function ($faculties) {
                return '<a href="/admin/faculty/'.$faculties->id.'/edit" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Edit</a>
                   <a href="'. route('admin.faculty.destroy', $faculties->id) .'" class="btn btn-xs btn-danger"><i class="glyphicon glyphicon-trash"></i> Delete</a>   ';
        })
        ->editColumn('updated_at', function ($faculties) {
            return $faculties->updated_at->diffForHumans();
        })
        ->filterColumn('updated_at', function ($query, $keyword) {
            $query->whereRaw("DATE_FORMAT(updated_at,'%Y/%m/%d') like ?", ["%$keyword%"]);
        })
        ->make(true);
    }
于 2017-10-06T05:18:08.253 回答
0

基于@Shaikhul-Saad 的回答

它适用于 xampp 和专用主机,但在 linux 共享主机中,这种方法不起作用 1-将类型从删除更改为发布 2-将方法更改为 _method 3-将 _DELETE 更改为 DELETE 下面的代码对我有用

$('#faculties-table').on('click', '.btn-delete[data-remote]', function (e) { 
e.preventDefault();
 $.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
var url = $(this).data('remote');
// confirm then
if (confirm('Are you sure you want to delete this?')) {
    $.ajax({
        url: url,
        type: 'POST',
        dataType: 'json',
        data: {_method: 'DELETE'}
    }).always(function (data) {
        $('#faculties-table').DataTable().draw(false);
    });
}else
    alert("You have cancelled!");});
于 2019-10-28T21:42:29.760 回答