在JQuery Ajax中,VerifyCsrfToken.php中的TokenMismatchException

时间:2015-12-23 22:52:58

标签: php laravel-5 laravel-5.1

以下是Blade中的代码。

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

@foreach($Projects as $Project)
    <tr>
        <td>
            @if($Project->ProjectStatusID == \App\Enumeration\Project\ProjectStatus::Open)
                <a pid="{!! $Project->ProjectID !!}" class="Shutmedown" >Cancel</a>
            @endif
        </td>
    </tr>
@endforeach

JQuery的

$('.Shutmedown').click(function() {
    $.ajax({
        url: "/CancelProject",
        type: "POST",
        data: {"ProjectID" : $(this).attr('pid')},
        async: true,
        contentType: "application/json; charset=utf-8",
        success: function () {
            location.reload();
        },
        error: function () {
            alert('hi');
        }
    });
});

问题是什么?

JQuery Ajax给出了错误:

  

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

在检查有关请求的更多详细信息时:我收到了以下错误详情。

  

VerifyCsrfToken.php第53行中的TokenMismatchException:

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

从Laravel文档开始,必须使用标头将令牌注入到ajax请求的后端。因此他们建议将令牌放在元字段中,例如

<meta name="csrf-token" content="{{ csrf_token() }}">

这样做:

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

通过标题将令牌发送到后端。

我希望它有所帮助。

因此,在您的情况下,在ajax请求中传递保存令牌的输入值。