经过多次尝试,Laravel 5.5在ajax调用上持续获得419个错误

时间:2018-01-15 10:02:57

标签: php jquery ajax laravel laravel-5.5

我真的很感激这方面的一些帮助。我尝试了每个人在其他帖子上建议的每个解决方案,包括:Laravel 5.5 ajax call 419 (unknown status)和此Ajax LARAVEL 419 POST error解决方案。

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

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

在ajax发布之前,我设置了像这样的ajax csrf_token:

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

然后我将ajax数据中的csrf_token发送为如下变量:

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

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

我的问题是为什么会发生这种情况?是csrf_token在3分钟后过期了么?我不想在verifyCsrfToken中间件中添加异常。 是什么解决了这个问题?

PS: leorent的答案是对的。但在将我的项目上传到实际的在线服务器之后。问题已经消失了。 我不知道为什么但是这个问题是因为windows并在本地主机本地运行laravel项目。 csrf令牌会话经常在widows localhost服务器上过期。不要担心,在将项目上传到实际服务器后,csrf的问题将自动解决。

1 个答案:

答案 0 :(得分:4)

添加带有ID:

的元标记
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">

然后在你的ajax电话上:

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


         success: function (response) {

         },
         error: function (response) {

         }
     });