Код работает очень хорошо в моей локальной среде разработчиков, но дает исключение 405 method not allowed
если я загружаю его на сервер. Решения по этому вопросу и этот вопрос не сработали для меня.
Вот контроллер.
public function DeleteMultipleProjects(Request $request){
$json = $request->projectsToDelete;
$to_delete = collect([]);
$projects = json_decode($json);
foreach ($projects as $project) {
$to_delete->push($project->id);
}
Project::destroy($to_delete);
}
Здесь соответствующая запись в файле маршрутов.
Route::post('/ajax/dashboard/delete-projects', 'ProjectController@DeleteMultipleProjects');
И здесь AJAX вызывает URL.
$.ajax({
url: '/ajax/dashboard/delete-projects',
method: 'POST',
data: {
projectsToDelete: JSON.stringify(vThis.selectedProjects),
},
complete: function(){
vThis.refreshProjects();
}
});
Вот как выглядят данные для примера тестового примера.
[{"id":140,"name":"a","updated_at":"Sun, Oct 21, 2018 4:31 AM","selected":true,"selectHovering":false},{"id":139,"name":"New Project","updated_at":"Sun, Oct 21, 2018 4:31 AM","selected":true,"selectHovering":false}]
Как я могу преодолеть эту ошибку, и почему это происходит только в производстве?
Изменить Стоит отметить, что у меня есть другие вызовы AJAX для маршрутов по всему моему приложению, и они работают нормально.
Проблема была в данных, которые я отправлял. Я не уверен, почему, но моему серверу не понравился весь массив проектов, поэтому я обновил его, чтобы отправить только массив id
я хотел бы удалить, и, следовательно, обновил контроллер, чтобы просто destroy
запрос. Если у кого-то есть объяснение, мне любопытно.
Кажется, вам не хватает токена csrf
Обновите данные своего ajax как:
$.ajax({
url: '/ajax/dashboard/delete-projects',
method: 'POST',
data: {
projectsToDelete: JSON.stringify(vThis.selectedProjects),
_token: '{{ csrf_token() }}',
},
complete: function(){
vThis.refreshProjects();
}
});
Ошибка 405 в Laravel означает, что маршрут не существует для используемого вами метода HTTP.
Если вы получаете эту ошибку при производстве, но не локально, это указывает на то, что ваши файлы маршрутов устарели или были кэшированы.
Очистите кеш маршрута с помощью:
php artisan route:clear
Убедитесь, что ваш маршрут POST существует:
php artisan route:list --path=ajax/dashboard/delete-projects
Если маршрут: список подтверждает, что ваш маршрут POST существует, но вы все еще получаете 405, другая вещь, которая может привести к кэшированным маршрутам, - это opcache без повторной проверки временных меток, в которых вам может потребоваться перезапустить процессы php для очистки.