Laravel CSRF token不匹配异常. 通过jQuery ajax发送 "Put "请求到资源路由上.

问题描述 投票:0回答:1

我需要向一个定义为.NET的资源Route发送一个PUT请求。

Route::resource('posts','PostController');

我的代码是这样工作的。

            var data = $(this).serializeArray();
            data.push( {name:'_token',value:"{{ csrf_token() }}" })
            $.ajax({
                type: "Put",
                url: _url,
                data: data,
                dataType: "json",
                success: function (response) {
                    if(response.status){
                        toastr.success(response.msg);
                    }
                    else{
                        toastr.warning(response.msg);
                    }
                },
            });

但是问题来了,当我需要通过该路由发送文件时,我不得不将我的提交函数修改为.CSRF token Mismatch。

          var data = new FormData(this);
          data.append("_token","{{ csrf_token() }}");
          var _url = $(this).attr('action');
          $.ajax({
            type: "Put",
            url: _url,
            data: data,
            dataType: "json",
            processData:    false,
            contentType:    false,
            success: function (response) {
              if(response.status){
               toastr.success(response.msg);
              }
            }

我遇到了一个异常信息 "CSRF token Mismatch"。这是因为我使用了 FormData() ?

ajax laravel csrf laravel-6.2 csrf-token
1个回答
3
投票

在您的刀片中添加 csrf

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

然后通过头文件发送,通过附加数据来避免发送

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

并删除这一行 data.append("_token","{{ csrf_token() }}"); 并尝试


0
投票

尝试在头部分传递csrf_token。

var data = $(this).serializeArray();

$.ajax({
    type: "Put",
    url: _url,
    headers: {
        'X-CSRF-TOKEN': '{{ csrf_token() }}'
    },
    data: data,
    dataType: "json",
    success: function (response) {
        if(response.status){
            toastr.success(response.msg);
        }
        else{
            toastr.warning(response.msg);
        }
    },
});

还有一种方法,当你提交表单时,在表单中传递token。

<form>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
© www.soinside.com 2019 - 2024. All rights reserved.