Laravel 5.5 ajax call 419 (неизвестно)

Я делаю вызов 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.

Используйте это в разделе главы:

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

и получить токен csrf в ajax:

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

Это похоже на ответ Кэннана. Тем не менее, это устраняет проблему, когда токен не следует отправлять на междоменные сайты. Это будет указывать только заголовок, если он является локальным запросом.

HTML:

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

JS:

 $.ajaxSetup({ beforeSend: function(xhr, type) { if (!type.crossDomain) { xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); } }, }); 

в моем случае я забыл добавить вход csrf_token в представленную форму. поэтому я сделал этот HTML:

 <form class="form-material" id="myform"> ... <input type="file" name="l_img" id="l_img"> <input type="hidden" id="_token" value="{{ csrf_token() }}"> .. </form> 

JS:

 //setting containers var _token = $('input#_token').val(); var l_img = $('input#l_img').val(); var formData = new FormData(); formData.append("_token", _token); formData.append("l_img", $('#l_img')[0].files[0]); if(!l_img) { //do error if no image uploaded return false; } else { $.ajax({ type: "POST", url: "/my_url", contentType: false, processData: false, dataType: "json", data : formData, beforeSend: function() { //do before send }, success: function(data) { //do success }, error: function(jqXhr, textStatus, errorThrown) //jqXHR, textStatus, errorThrown { if( jqXhr.status === "422" ) { //do error } else { //do error } } }); } return false; //not to post the form physically 

Несмотря на то, что у вас есть csrf_token , если вы выполняете аутентификацию своих действий с помощью Policies Laravel, у вас также может быть ответ 419. В этом случае вы должны добавить необходимые политики в свой класс Policy .