MethodNotAllowedHttpException - CSRF -laravel 5.2

时间:2016-08-06 16:09:32

标签: php jquery html ajax laravel

我使用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')

如果我重新加载页面,它会再次运行

3 个答案:

答案 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')})

以下是一些可能对您有所帮助的问题:

Jquery Event won't fire after ajax call

why does jquery's .load() ignore <script>?