Метод Laravel 405 не разрешен по запросу AJAX - PullRequest
0 голосов
/ 20 октября 2018

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

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

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

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

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

php artisan route:clear

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

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

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

0 голосов
/ 21 октября 2018

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

0 голосов
/ 20 октября 2018

Похоже, вам не хватает токена csrf

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

$.ajax({
    url: '/ajax/dashboard/delete-projects',
    method: 'POST',
    data: {
        projectsToDelete: JSON.stringify(vThis.selectedProjects),
        _token: '{{ csrf_token() }}',
    },
    complete: function(){
        vThis.refreshProjects();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...