laravel TokenMismatchException in ajax request
There is a tip in the Laravel docs on how to do this. This might not have been available at the time of the question, but I thought I would update it with a answer.
http://laravel.com/docs/master/routing#csrf-x-csrf-token
I have tested the meta tag method from the documentation and got it working. Add the following meta tag into your global template
<meta name="csrf-token" content="{{ csrf_token() }}">
Add this JavaScript that sets defaults for all ajax request in jQuery. Preferably in a js file that is included across your app.
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }})
This token can exist in the request header or the form. This populates it into the request header of every ajax request.
You have to insert a hidden input with the _token and later get that value as you do to get the other form fields in your ajax post.
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
An another method,
On your view you can set an object with the _token
<script type="text/javascript"> var _globalObj = {{ json_encode(array('_token'=> csrf_token())) }}</script>
and later on your ajax call you can get the _token from the object like this:
var token = _globalObj._token;
and include it on your ajax post.
Just do simple thing as i have shown in following code,
$.ajax({ type: 'POST', url: 'your-post-route-url', data: { "_token": "{{ csrf_token() }}", "form_data": $('#Form').serialize(), }, success: function (data) { console.log(data); }, error: function (reject) { console.log(reject); } });
I hope this one is the easiest way to solve this problem without any hidden field and it works for me in laravel 5.4 version :)
Hope it helps.