Метод Laravel 405 не разрешен по запросу AJAX

-2

Код работает очень хорошо в моей локальной среде разработчиков, но дает исключение 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 для маршрутов по всему моему приложению, и они работают нормально.

  • 0
    Отправляются ли запросы непосредственно на сервер приложений?
  • 0
    Что вы имеете в виду? AJAX-запросы направляются прямо на сервер, да. Стоит отметить, что у меня есть другие AJAX-вызовы к маршрутам в моем приложении, и они работают нормально.
Показать ещё 11 комментариев
Теги:
laravel-5

3 ответа

0
Лучший ответ

Проблема была в данных, которые я отправлял. Я не уверен, почему, но моему серверу не понравился весь массив проектов, поэтому я обновил его, чтобы отправить только массив id я хотел бы удалить, и, следовательно, обновил контроллер, чтобы просто destroy запрос. Если у кого-то есть объяснение, мне любопытно.

0

Кажется, вам не хватает токена csrf

Обновите данные своего ajax как:

$.ajax({
    url: '/ajax/dashboard/delete-projects',
    method: 'POST',
    data: {
        projectsToDelete: JSON.stringify(vThis.selectedProjects),
        _token: '{{ csrf_token() }}',
    },
    complete: function(){
        vThis.refreshProjects();
    }
});
  • 0
    Ранее я глобально установил токен csrf. Извиняюсь за то, что не упомянул это.
  • 0
    Еще одна распространенная проблема, с которой я столкнулся, это то, что маршрут можно поймать до прибытия по указанному вами маршруту. Поместите определение маршрута Ajax в верхней части списка маршрутов
Показать ещё 2 комментария
0

Ошибка 405 в Laravel означает, что маршрут не существует для используемого вами метода HTTP.

Если вы получаете эту ошибку при производстве, но не локально, это указывает на то, что ваши файлы маршрутов устарели или были кэшированы.

Очистите кеш маршрута с помощью:

php artisan route:clear

Убедитесь, что ваш маршрут POST существует:

php artisan route:list --path=ajax/dashboard/delete-projects

Если маршрут: список подтверждает, что ваш маршрут POST существует, но вы все еще получаете 405, другая вещь, которая может привести к кэшированным маршрутам, - это opcache без повторной проверки временных меток, в которых вам может потребоваться перезапустить процессы php для очистки.

  • 0
    Перепробовал все это, все еще получая 405.
  • 0
    Затем опубликуйте вывод списка маршрутов и настройки opcache. Вы перезапустили свои php процессы для очистки opcache?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню