Laravel5 ajax 删除不起作用

skl*_*boy 2 javascript php ajax jquery laravel-5

我正在做一个项目,我应该使用ajax从表中删除用户。我一直在寻找多种解决方案,但无论如何都行不通。这是我得到的错误: users

加载资源失败:服务器响应状态为 500(内部服务器错误)。

VerifyCsrfToken.php 第 46 行中的 TokenMismatchException

JS:

$('.btn-delete').click(function(){
    var id = $(this).val();
    $.ajax({
        type: 'DELETE',
        url: '/laravel-exercise/public/index/'+id,
        success: function (data) {
            console.log('Success:', data);
        },
        error: function (data) {
            console.log('Error:', data);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

看法:

$('.btn-delete').click(function(){
    var id = $(this).val();
    $.ajax({
        type: 'DELETE',
        url: '/laravel-exercise/public/index/'+id,
        success: function (data) {
            console.log('Success:', data);
        },
        error: function (data) {
            console.log('Error:', data);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

路线:

<button class="btn btn-danger btn-delete"
 value="{{$user->id}}" data-token="{{ csrf_token() }}">Delete</button>
Run Code Online (Sandbox Code Playgroud)

用户控制器:

Route::delete('index/{$id}', 'UsersController@destroy');
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?

Giu*_*erv 5

可能是由于CSRF保护。

尝试'X-CSRF-TOKEN'在绑定按钮单击之前添加。

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

$('.btn-delete').click(function(){
    var id = $(this).val();
    $.ajax({
        type: 'DELETE',
        url: '/laravel-exercise/public/index/'+id,
        success: function (data) {
            console.log('Success:', data);
        },
        error: function (data) {
            console.log('Error:', data);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

将 CSRF 令牌添加到您的请求中。

看看这里的信息。

路由已找到,否则我将捕获 404 异常。

编辑

看看你是如何制作按钮的,你也可以使用post请求,但传递_method数据。

HTML:

<button class="btn btn-danger btn-delete" value="{{$user->id}}"
     data-token="{{ csrf_token() }}">Delete</button>
Run Code Online (Sandbox Code Playgroud)

Javascript:

$('.btn-delete').click(function(){
    var token = $(this).data('token');
    var id = $(this).val();

    $.ajax({
        url: '/laravel-exercise/public/index/'+id,
        type: 'post',
        data: {_method: 'delete', _token :token},
        success: function (data) {
            console.log('Success:', data);
        },
        error: function (data) {
            console.log('Error:', data);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)