【问题标题】:MethodNotAllowedHttpException - CSRF -laravel 5.2MethodNotAllowedHttpException - CSRF -laravel 5.2
【发布时间】:2016-08-06 16:09:31
【问题描述】:

我正在使用 ajax 发布请求,然后它使用 jquery 函数“加载”刷新网站的一部分并且它运行良好但是当我尝试重做这篇文章时它说 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')

如果我重新加载页面,它会再次工作

【问题讨论】:

    标签: php jquery html ajax laravel


    【解决方案1】:

    通常建议将 csrf 令牌以 meta 标签(在 <head></head> 标签内)传递给网页

     <meta name="_token" content="{{  csrf_token() }}" />
    

    【讨论】:

    • 好吧,我知道该怎么做了,谢谢~(˘▾˘~) (~˘▾˘)~ \ (•◡•) /
    • 不,它不起作用ಠ~ಠ
    • 这只会使其在页面中可用。您必须在每个 jquery 请求中发送它
    • 是的,我知道,但它不起作用我不断收到 MethodNotAllowedHttpException
    【解决方案2】:

    你能显示你的路线吗?缺少 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
            }
        });
    }
    

    【讨论】:

    • 能否也包含您的视图和控制器方法?更容易理解您的应用
    【解决方案3】:

    我解决了这个问题,正如@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>?

    【讨论】:

      猜你喜欢
      • 2016-08-31
      • 2018-01-13
      • 1970-01-01
      • 2016-06-23
      • 2016-06-04
      • 2016-06-15
      • 2016-06-20
      • 2016-12-26
      • 2016-09-18
      相关资源
      最近更新 更多