Skip to content

Instantly share code, notes, and snippets.

@roNn23
Forked from JeffreyWay/laravel.js
Last active July 16, 2019 11:41
Show Gist options
  • Save roNn23/a86f31ecaf0c6e0a7d65 to your computer and use it in GitHub Desktop.
Save roNn23/a86f31ecaf0c6e0a7d65 to your computer and use it in GitHub Desktop.
Updated delete-script of Jeffrey Way to work with Laravel 5. And optimized the implementation for the CSRF token. #laravel
/*
<a href="posts/2" data-method="delete"> <---- We want to send an HTTP DELETE request
- Or, request confirmation in the process -
<a href="posts/2" data-method="delete" data-confirm="Are you sure?">
Add this to your view:
<script>
window.csrfToken = '<?php echo csrf_token(); ?>';
</script>
<script src="/js/deleteHandler.js"></script>
*/
(function() {
var laravel = {
initialize: function() {
this.registerEvents();
},
registerEvents: function() {
$('body').on('click', 'a[data-method]', this.handleMethod);
},
handleMethod: function(e) {
var link = $(this);
var httpMethod = link.data('method').toUpperCase();
var form;
// If the data-method attribute is not PUT or DELETE,
// then we don't know what to do. Just ignore.
if ( $.inArray(httpMethod, ['PUT', 'DELETE']) === - 1 ) {
return;
}
// Allow user to optionally provide data-confirm="Are you sure?"
if ( link.data('confirm') ) {
if ( ! laravel.verifyConfirm(link) ) {
return false;
}
}
form = laravel.createForm(link);
form.submit();
e.preventDefault();
},
verifyConfirm: function(link) {
return confirm(link.data('confirm'));
},
createForm: function(link) {
var form =
$('<form>', {
'method': 'POST',
'action': link.attr('href')
});
var token =
$('<input>', {
'name': '_token',
'type': 'hidden',
'value': window.csrfToken
});
var hiddenInput =
$('<input>', {
'name': '_method',
'type': 'hidden',
'value': link.data('method')
});
return form.append(token, hiddenInput)
.appendTo('body');
}
};
laravel.initialize();
})();
@DanJFletcher
Copy link

DanJFletcher commented Feb 20, 2017

This works fine for me - thank you!

Guys, make sure you don't forget:

  <script>
		window.csrfToken = '<?php echo csrf_token(); ?>';
  </script>

The quotes wrapping the CSRF token are important. Otherwise this script will fail, hence why you end up sending a GET request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment