php - 如何通过ajax删除laravel中的记录

标签 php ajax laravel

我知道有与这个问题相关的类似问题,但我在那些有正确答案的人之后尝试了我的副本,但仍然无济于事。
我不断收到此错误:

BadMethodCallException Method delete does not exist. in Macroable.php (line 74)



快点,这是我的 Controller :
public function destroy(Subject $subject)
{
    //
    $response = array();

    $modal = new Subject; 
    $modal = Subject::find($subject);

    if ( $modal->delete() ) {
        $response['success'] = '<b>'.$modal->name.'</b>'.' successfully deleted';
        $response['subject'] = $modal;   
    }

    return \Response::json($response);

}

这是我的路线:
Route::delete('/subjects/delete/{subject}', 'SubjectsController@destroy');

这是我的观点:
<td>
    <a data-token="{{ csrf_token() }}" id="delete" data-id="{{$subject->id}}" data-toggle="tooltip" title="Edit" href="/subjects/{{$subject->id}}" role="button"><i class="glyphicon glyphicon-trash text-danger"></i></a>
</td>

最后我的脚本:
$(document).on('click', '#delete', function(event) {
            event.preventDefault();
            /* Act on the event */

            // id of the row to be deleted
            var id = $(this).attr('data-id');

            var token = $(this).data("token");

            console.log(id);

            // row to be deleted
            var row = $(this).parent("td").parent("tr");

            var message = "subject";

             bootbox.dialog({
                message: "Are you sure you want to Delete this "+message+"?",
                title: "<i class='glyphicon glyphicon-trash'></i> Delete !",
                buttons: {
                    success: {
                        label: "No",
                        className: "btn-success",
                        callback: function() {
                            $('.bootbox').modal('hide');
                        }
                    },
                    danger: {
                        label: "Delete!",
                        className: "btn-danger",
                        callback: function() {

                            $.ajaxSetup({
                                headers: {
                                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                                }
                            });

                            $.ajax({
                                type: 'DELETE',
                                url: '/subjects/delete/'+id,
                                data: {
                                    "id": id,
                                    "_method": 'DELETE',
                                    "_token": token
                                }
                            })
                           .done(function(response){
                                bootbox.alert(response.success);
                                //removing the row that have been deleted
                                jQuery(row).fadeOut('slow');
                            })
                           .fail(function(){
                                bootbox.alert('Something Went Wrong .... Please contact administrator');
                            })
                        }
                    }
                }
            });
        });

这是我不这样做时得到的结果 php artisan route:list
enter image description here

最佳答案

我不知道为什么它以这种方式工作的技术细节,但问题似乎来自我的 Controller 销毁方法。所以,这就是我所要做的:

Controller 代码:

public function destroy($subject)
{
    //
    $response = array();

    $modal = new Subject; 
    $modal = Subject::find($subject);

    if ( $modal->delete() ) {
        $response['success'] = '<b>'.$modal->name.'</b>'.' successfully deleted';
        $response['subject'] = $modal;   
    }

    return \Response::json($response);

}

脚本:
callback: function() {

                            $.ajaxSetup({
                                headers: {
                                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                                }
                            });

                            $.ajax({
                                type: 'DELETE',
                                url: '/subjects/delete/'+id,
                                data:{"id": id, "_method": 'DELETE'}
                            })
                           .done(function(response){
                                bootbox.alert(response.success);
                                //removing the row that have been deleted
                                jQuery(row).fadeOut('slow');
                            })
                           .fail(function(){
                                bootbox.alert('Something Went Wrong .... Please contact administrator');
                            })
                        }

路线:
Route::delete('/subjects/delete/{subject}','SubjectsController@destroy');

对我来说最重要的是删除 Subject来自 destroy()参数,它工作。
如果你们中的任何人知道它为什么起作用,请提供和解释,以便我也能理解它。谢谢!!

关于php - 如何通过ajax删除laravel中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570699/

相关文章:

php - 在 Laravel 中保存后返回主 ID

php - 拉维尔 5 : insert row with possibility of duplication

php - 在 php 中创建 zip 文件并在添加之前重命名每个文件

javascript - Laravel 5 通过 ajax 返回 View - 我的方法是 hacky 还是好?

javascript - 带有自定义参数的Ajax请求

javascript - 如何使用 jquery $.ajax 重定向到页面

php - 自定义验证错误参数

php - 使用 Nexmo PHP Laravel 进行 Web 浏览器音频通话

javascript - 我正在尝试将一些表单数据从一个 html 页面传递到另一个

php - NSIS 和 PHP 之间的 Blowfish 加密消息