метод laravel POST не разрешен

#laravel

#ларавель

Вопрос:

я использую laravel с ajax, чтобы получить отчет для персонала, мой код просмотра

 lt;div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab"gt;  lt;form id="form_startTimeReport" method="POST" action="" enctype="multipart/form-data"gt;  @csrf  lt;input type="hidden" value="xxx" name="xxx" id="xxx"gt;  lt;div class="form-row"gt;  lt;div class="col-md-6 text-left"gt;  lt;button type="submit" id="form_startTimeReport_button" class="btn btn-dark btn-sm radius mt-2 shadow"gt;{{ __('messages.Search')}}lt;/buttongt; lt;/divgt;  lt;/divgt;  lt;/divgt; lt;/formgt; lt;/divgt;  

и в моем файле маршрута

 Route::post('/startTime-report', 'StaffController@startTimeReport')-gt;name('startTimeReport');  

в файле JavaScript

 $('button#form_startTimeReport_button').on('click', function (e) {  e.preventDefault();  $(this).html('lt;span class="spinner-border spinner-border-sm"gt;lt;/spangt; Loading...');  var formData = new FormData($('#form_startTimeReport')[0]);  alert(formData.get('xxx'));  setTimeout(function () {  $.ajax({  url: config.routes.startTimeReport,  type: "POST",  enctype: "multipart/form-data",  data: formData,  processData: false,  contentType: false,  cache: false,  success: function (result) {  //alert(result);  var myWindow = window.open(config.routes.startTimePopup, '_blank', 'top=0,left=500,width=1200,height=250,scrollbars=yes,resizable=yes');  myWindow.document.write(result.html);  $(this).html(config.messages.searchReport);  },  error: function (request, status, error) {  alert(request.statusText   "["   request.status   "]");  alert(request.responseText);  $(this).html(config.messages.searchReport);  }  });  }, AjaxTimeBeforeCalling);  });  

и в моем файле контроллера

 public function startTimeReport(Request $request)  {  $staffs = Stafftime::select(  'id',  'starttime',  'endtime',  'states',  'staff_id',  'created_at',  'updated_at'  )-gt;where('states', '=', 'open')  -gt;get();   //return $staffs;  $view = view('admin.staff.reports.startTimeReport', compact('staffs'))-gt;render();  return response()-gt;json(['html' =gt; $view]);  }  

у меня ошибка (метод не разрешен[405]) метод POST не поддерживается для этого маршрута.Поддерживаемый метод GET,HEAD

Комментарии:

1. убедитесь, что config.routes.startTimeReport это правильный маршрут.

2. Пожалуйста, убедитесь, что файл config.routes.startTimeReport взят из того же имени маршрута: маршрут («startTimeReport»). Обычно такая ошибка случается.

3. ЭТО правильный путь, я уверен, если тип ajax выполняет свою работу, но мне нужен метод post

4. вы убедитесь, что javascript вообще запущен? поскольку действие вашей формы является текущим URL-адресом, потому что оно пустое, и это, скорее всего, маршрут GET, возвращающий эту форму

Ответ №1:

сначала вы можете протестировать две вещи: добавить csrf в ajax-запрос

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

или

 data: {  "_token": "{{ csrf_token() }}",  "id": id  }  

и во-вторых, удалите кэш маршрутов

 php artisan cache:clear  php artisan route:cache  

Комментарии:

1. У меня уже есть маркер CSRF заголовков, и я очищаю кэш маршрутов, та же проблема (метод не разрешен[405])

2. во — первых, где именно находится токен csrf в ajax ?

3. $.ajaxSetup({ заголовки: { ‘X-CSRF-ТОКЕН’: $(‘мета[имя=»csrf-токен»]’).attr(«содержимое»), «Разрешение на управление доступом»: «*», «Методы разрешения доступа»: «ПОЛУЧИТЬ,ПОМЕСТИТЬ,ОПУБЛИКОВАТЬ,УДАЛИТЬ» } });

4. где вы получаете config.routes.startTimeReport, значение в ajax?

5. в app.blade.php я создаю конфигурацию объекта, такую как startTimeReport : «{{ маршрут(‘startTimeReport’) }}»,