几次尝试后,laravel 5.5继续在ajax调用中出现419发布错误

Sal*_*dor 1 php ajax jquery laravel laravel-5.5

我真的很感谢这方面的帮助。我尝试了其他人在其他帖子上建议的所有解决方案,包括:Laravel 5.5 ajax调用419(未知状态)和此Ajax LARAVEL 419 POST错误解决方案。

但是,即使在头部设置了csrf_token元标记,我仍然会收到419错误:

<meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

在ajax发布调用之前,我像这样设置ajax csrf_token:

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});
Run Code Online (Sandbox Code Playgroud)

之后,我将ajax数据中的csrf_token作为变量发送,如下所示:

$.ajax({
        url     : "/getCompare",
        type    :"POST",
        cash    : false,
        data    :{ id : id,_token: '{{csrf_token()}}'},
        success :
           function( response ) {
              $("#compare_products").html(response);
             }
        });
Run Code Online (Sandbox Code Playgroud)

页面的应用方式使用户反复请求ajax调用以比较产品。它在很多尝试下都可以正常工作,但是在特定情况下,会引发419错误。这种情况有时是当我在页面加载后大约3分钟按下一个按钮时,出现了这个错误。有时它会在第三次或第四次尝试时给出错误。重新加载页面后,问题已解决,但仍然按照我解释的方式再次发送该错误。

我的问题是为什么会这样?是3分钟后csrf_token过期还是什么?而且我不想在verifyCsrfToken中间件中添加异常。该问题的解决方案是什么?

PS: leorent的答案是正确的。但是将我的项目上传到实际的在线服务器后。问题已经解决了。我不知道为什么,但是这个问题是因为Windows和在本地主机中本地运行laravel项目。csrf令牌会话在寡妇localhost服务器上经常过期。不用担心,将项目上传到实际服务器后,您的csrf问题将自动得到解决。

Leo*_*ent 5

添加带有ID的meta标签:

<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

然后在你的ajax电话:

     $.ajax({
         url     : "/getCompare",
         type    :"POST",
         cash    : false,
         data: {'id': id, "_token": $('#token').val()},
         type: 'POST',


         success: function (response) {

         },
         error: function (response) {

         }
     });
Run Code Online (Sandbox Code Playgroud)