0

I am in a need to send a PUT request to a resource Route defined as :

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

My code works fine like this :

            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);
                    }
                },
            });

But the problem comes when i am having to send files through the route, for that i had to modify my submit function as :

          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);
              }
            }

I hit a exception with message "CSRF token Mismatch". Is this because I used FormData() ?

Sijan Bhattarai
  • 570
  • 2
  • 6
  • 25

1 Answers1

3

Add the csrf in your blade

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

And then send it via headers to avoid it sending by appending it data

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

And remove this line data.append("_token","{{ csrf_token() }}"); and try

Khalid Khan
  • 3,017
  • 1
  • 11
  • 27