【问题标题】:Laravel 5.5 : 419 unknown status with AJAXLaravel 5.5:AJAX 的 419 未知状态
【发布时间】: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');
      }
  });
});

还有例外:

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

【问题讨论】:

  • 跟踪说明了什么?似乎那里可能有一些有用的东西

标签: php ajax forms laravel csrf


【解决方案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')
       }
    });
    

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 2019-07-16
      • 2018-05-26
      • 2021-06-11
      • 2019-10-22
      • 2019-09-04
      • 1970-01-01
      • 2018-09-20
      • 2018-08-24
      相关资源
      最近更新 更多