我使用ajax发布请求然后使用jquery函数刷新网站的一部分" load"它工作得很好但是当我尝试重做这个帖子时它说MethodNotAllowedHttpException我认为laravel csrf保护中的问题因为我刷新整个页面后它工作正常 我的问题是,即使我刷新网站的一部分,我如何保存csrf令牌? **提前感谢**(ᵔᴥᵔ)
这些是路线
Route::post('/upvote', array(
'uses'=> 'AffichageController@upvote',
'as'=> 'upvote' ));
Route::post('/putcomment', array(
'uses'=> 'AffichageController@putcomment',
'as'=> 'putcomment'));
我认为问题不在路由中,因为它工作正常但是当ajax加载网站的一部分时它停止工作,这就是我只加载网站的一部分
$("#partOfSite").load('theURLofSITE #partOfSite')
如果我重新加载页面,它会再次运行
答案 0 :(得分:1)
通常建议将csrf令牌传递给元标记中的网页(位于<head></head>
标记内)
<meta name="_token" content="{{ csrf_token() }}" />
答案 1 :(得分:1)
你能展示你的路线吗?缺少CSRF令牌的错误异常通常是TokenMismatchException。 MethodNotAllowedHttpException表示路由有问题。
路线未定义或您没有传递正确的动词。这是一个用于PUT方法的AJAX调用示例:
function myAjaxCall() {
var formData = {
'_method': 'PUT'
// Some other data you want to pass to your controller
}
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf_token"]').attr('content')
}
});
$.ajax({
url: url,
type: "POST",
data: formData,
success: function (response) {
// Your login on success
},
error: function (response) {
// Handle error
}
});
}
答案 2 :(得分:0)
我解决了这个问题,正如@Gadzhev先生所说的csrf验证没有问题,这是路线问题。
路由在ajax函数中定义但不在表单中定义所以当我用jquery加载表单时忘记有一个函数执行这个表单并开始提交没有ajax的表单因此导致这个问题而且它意味着路线错误。
所以要解决这个问题,只需用你要加载的div重新加载ajax函数。如果你正在使用这样的函数触发器
$('.button').on('click',function(){alert('clicked')})
将其更改为:
$('body').on('click','.button',function(){alert('clicked')})
以下是一些可能对您有所帮助的问题: