Laravel 5.5:AJAX 的 419 未知状态

Posted

技术标签:

【中文标题】Laravel 5.5:AJAX 的 419 未知状态【英文标题】:Laravel 5.5 : 419 unknown status with AJAX 【发布时间】:2018-07-18 17:40:57 【问题描述】:

我请求POST

路线:

Route::post('/register','CommonController@postRegister')->name('register');

CSRF 元标记:

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

$("#submitSalonForm").click(function(e) 
  $.ajaxSetup(
      headers: 
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      
  );
  $.ajax(
      url: "/register",
      type: "post",
      data: new FormData($('form')[1]),
      cache: false,
      contentType: false,
      processData: false,
      success:function(response) 
          return alert('Form 2 submitted');
      
  );
);

还有例外:

有时会出现异常,有时代码运行流畅,我不知道我在这里缺少什么。

【问题讨论】:

跟踪说明了什么?似乎那里可能有一些有用的东西 【参考方案1】:

将ajax方法从post改为get

<input type="hidden" name="_token" id="token" value=" csrf_token() ">

Ajx 调用:

let formData = $('form').serializeArray();
$.ajax(
      url: "/register",
      type: "POST",
      data: formData, "_token": $('#token').val(),
      cache: false,
      datatype: 'JSON',
      processData: false,
      success: function (response) 
           console.log(response);
         ,
         error: function (response) 
           console.log(response);
         
  );

你的路线是得到

Route::get('/register','CommonController@showRegister')->name('register');

Ajax 调用正在发出一个 post 请求,laravel 发出 http 异常。

编辑: Laravel 419 post错误通常与api.php和token授权有关

所以尝试在 ajax 正文中包含令牌,而不是像上面那样。

【讨论】:

我的错,路线已发布,我已更新问题。 @Gammer 新的表单数据功能在哪里? 没有那个功能,只有new FormData($('form')[1])!真的! 还是同样的问题,有时有效,有时无效,当我花一些时间填写表格时,它给了我 419,但是当我快速完成时,它运行正常。 419 表示令牌不匹配异常,因此请在 ajax 正文中包含令牌,【参考方案2】:

无需单独设置 ajax。 Laravel 会为应用程序管理的每个活动用户会话自动生成一个 CSRF “令牌”。用这个获取令牌:

var token = " csrf_token() ";

将令牌传递到data

var token = " csrf_token() ";
var formData = new FormData($('form')[1])
$.ajax(
    url : '/register',
    data : _token:token,formData:formData,
    type: 'post',
    ...
)

【讨论】:

无效,同样的 419 异常 :(,它杀了我 如果它让你如此困扰,我有一个非常糟糕的主意。从app/Http/Middleware/VerifyCsrfToken.php的csrf验证中排除这条路由【参考方案3】:

好吧,我知道我为时已晚,但我确实遇到了你所面临的确切问题。

我 100% 确定令牌已随请求一起发送,但问题仍然存在。

所以,经过太多的搜索,我终于通过以下步骤修复了它:

php artisan config:clear          
php artisan view:clear
php artisan route:clear
php artisan cache:clear
php artisan clear-compiled

【讨论】:

【参考方案4】:

除了将 crsf-token 值放在标头元标记中之外,您还需要在 AJAX 请求中传递它,例如:

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

【讨论】:

以上是关于Laravel 5.5:AJAX 的 419 未知状态的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 AJAX Post Call上没有消息异常。第203行,Handler.php,419未知状态

多次尝试后,Laravel 5.5 在 ajax 调用中不断收到 419 发布错误

POST http://localhost:8000/offers-ajax/store 419 (未知状态) Laravel AJAX

Laravel 419 未知状态

Laravel 5.5 Axios POST 导致 419 错误

Laravel 5.7 Ajax 发布请求返回 419 状态码