#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’) }}»,