Laravel 5.5 ajax call 419 (未知状态)

2022-08-30 06:30:42

我做了一个ajax调用,但我不断得到这个错误:

419(未知状态)

不知道是什么原因导致我在其他帖子上看到的,它必须用csrf令牌做一些事情,但我没有形式,所以我不知道如何解决这个问题。

我的电话:

$('.company-selector li > a').click(function(e) {
     e.preventDefault();

     var companyId = $(this).data("company-id");


      $.ajax({
          headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
          },
          url: '/fetch-company/' + companyId,
          dataType : 'json',
          type: 'POST',
          data: {},
          contentType: false,
          processData: false,
          success:function(response) {
               console.log(response);
          }
     });
  });

我的路线:

Route::post('fetch-company/{companyId}', 'HomeController@fetchCompany');

我的控制器方法

/**
 * Fetches a company
 *
 * @param $companyId
 *
 * @return array
 */
public function fetchCompany($companyId)
{
    $company = Company::where('id', $companyId)->first();

    return response()->json($company);
}

最终目标是在 html 元素中显示响应中的内容。


答案 1

在头部部分使用这个:

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

并在 ajax 中获取 csrf 令牌:

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

请参阅 Laravel 文档csrf_token


答案 2

解决此问题的另一种方法是在 ajax 数据中使用字段,并在 blade 中设置 的值。这是我刚刚尝试的一个工作代码。_token{{csrf_token()}}

$.ajax({
    type: "POST",
    url: '/your_url',
    data: { somefield: "Some field value", _token: '{{csrf_token()}}' },
    success: function (data) {
       console.log(data);
    },
    error: function (data, textStatus, errorThrown) {
        console.log(data);

    },
});

推荐