【发布时间】:2015-07-05 10:16:42
【问题描述】:
我本可以发誓我曾经有过这个工作,但现在我正在努力弄清楚为什么它不会。我发现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();
})();
【问题讨论】:
-
您的路线设置如何?如果您无法使脚本正常工作,也许这可能是一种替代方法:barryvdh.nl/laravel/jquery/2015/04/11/…
-
看起来可以工作,与 bower 一起安装,但我没有使用 application.js,所以没有设置似乎没有记录
-
我想通了 - 只需添加 rails.js 包含,然后按照包含的说明添加 csrf-token 和 csrf-param 元标记。很好的解决方案。这样做时,我意识到我有一个重复的 js 函数,它与我的新 deleteHandler 冲突。感谢您的帮助。
-
不客气,很高兴能为您提供帮助!
标签: javascript laravel laravel-5