我本来可以发誓我曾经有过一次这样的工作,但是现在我拉着我的头发试图找出它为什么不会这样做。我发现this great script在删除链接旁边插入一个隐藏的表单,然后使用必要的标记提交表单。我在git网站上发布了一条消息,但没有回复。
我完全按照建议设置它并查看DOM我可以看到表单在那里,插入。我已经完成了一些警报,以确保它能正确地看到令牌但每次都得到:
TokenMismatchException in VerifyCsrfToken.php line 46:
如果我把一个旧的标准Laravel删除表单工作正常,我似乎无法让这个脚本像它应该的那样工作。没有其他的javascript错误或我可以找到的问题。
这是我添加到页面顶部代码的脚本:
<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();
})();
答案 0 :(得分:0)
正如haakym所说,一个解决方案是Unobtrusive JavaScript。在实现的过程中,我意识到我在另一个与我的deleteHandler冲突的js文件中有一个旧版本的删除处理程序。
像往常一样,有很多方法可以实现相同的解决方案。感谢输入haakym。