首页 文章

在localhost上的laravel 5.3中的ajax post请求中的CSRF令牌不匹配异常

提问于
浏览
3

我是laravel的新手 . 我在localhost上使用laravel 5.3,我使用ajax post请求将数据发布到控制器函数 . 我已经在主模板的head部分中集成了这样的CSRF令牌

<meta name="csrf-token" content="{{ csrf_token() }}">

后面包括jquery我添加这个脚本

<script type="text/javascript">
    $( document ).ready(function() {
      $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }

      });
      console.log($('meta[name="csrf-token"]').attr('content'));
    });
  </script>

我按这样的按钮点击发送数据

$.ajax({
    type: "POST",
    url: './add_to_cart',
    data: {id:prod_id,name: name,price:price},
    success: function( msg ) {

    }
});

第一次通话是正确的,没有错误 . 但是在第一次调用后每次调用返回错误

VerifyCsrfToken.php第67行中的TokenMismatchException:

这是错误截图:
error screenshot

3 回答

  • 0

    使用不包含的 Headers 调用ajax函数 . 我相信你的meta标签是这样的

    <meta name="csrf-token" content="{{ csrf_token() }}">
    

    像这样

    $.ajax({
        type: "POST",
        url: '/add_to_cart',
        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
        data: {id:prod_id,name: name,price:price},
        success: function( msg ) {
    
        }
    });
    

    所以每次完成ajax调用时,Header都会包含 csrf_token() .

  • 0

    我想你应该试试这个:

    <meta name="csrf-token" content="{{ csrf_token() }}">
    
    $.ajax({
       type: "POST",
       url: './add_to_cart',
       headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
       data: {"_token": "{{ csrf_token() }}",id:prod_id,name: name,price:price},
       success: function( msg ) {
    
       }
    });
    

    希望这对你有用!

  • 0

    仔细检查我的代码后 . 我发现这段代码正在执行此操作 . 会话::冲洗();删除此问题后解决了 . 非常感谢@Naveen Kumar的努力

相关问题