Ошибка 405 (метод не разрешен) Laravel 5

Я пытаюсь выполнить запрос POST с jQuery, но im получает ошибку 405 (метод не разрешен), Im работает с Laravel 5

Это мой код:

JQuery

<script type="text/javascript">
    $(document).ready(function () {
        $('.delete').click(function (e){
            e.preventDefault();
            var row = $(this).parents('tr');
            var id = row.data('id');
            var form = $('#formDelete');
            var url = form.attr('action').replace(':USER_ID', id);
            var data = form.serialize();
            $.post(url, data, function (result){
                alert(result);
            });
        });
    });
    </script>

HTML

{!! Form::open(['route' => ['companiesDelete', ':USER_ID'], 'method' =>'DELETE', 'id' => 'formDelete']) !!}

    {!!Form::close() !!}

контроллер

public function delete($id, \Request $request){
        return $id;
    }

Ошибка JQuery http://localhost/laravel5.1/public/empresas/eliminar/5 405 (метод не разрешен).

Значение URL

http://localhost/laravel5.1/public/empresas/eliminar/5

и значение данных

_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.

Если я изменяю запрос $.get, он работает нормально, но я хочу сделать запрос на отправку.

Кто-нибудь может мне помочь?

Спасибо.

ИЗМЕНИТЬ!!

Маршрут

Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => '[email protected]']);

Ответы

Ответ 1

Исключение methodNotAllowed указывает, что маршрут для HTTP-метода, который вы запрашиваете, не существует.

Ваша форма настроена для запроса DELETE, поэтому для получения этого маршрута необходимо использовать Route::delete().

Route::delete('empresas/eliminar/{id}', [
        'as' => 'companiesDelete',
        'uses' => '[email protected]'
]);

Ответ 2

Ваш файл route.php должен быть правильно настроен.

Я предполагаю, что ваша текущая настройка похожа:

Route::post('/empresas/eliminar/{id}','[email protected]');

или что-то в этом роде. Определите маршрут для метода удаления.

Route::delete('/empresas/eliminar/{id}','[email protected]');

Теперь, если вы используете ресурс Route, имя маршрута по умолчанию, используемое для метода DELETE, является .destroy. Вместо этого определите логику удаления в этой функции.

Ответ 3

Если вы используете маршруты ресурсов, то в теле HTML формы вы можете использовать метод method_field следующим образом:

<form>
  {{ csrf_field() }}
  {{ method_field('PUT') }}
  <!-- ... -->
</form>

Это создаст скрытый ввод формы с типом метода, который правильно интерпретируется Laravel 5. 5+.

Начиная с Laravel 5.6 вы можете использовать следующие директивы Blade в шаблонах:

<form>
  @method('put')
  @csrf
  <!-- ... -->
</form>

Надеюсь, что это может помочь кому-то в будущем.

Ответ 4

Когда вы используете метод delete в форме, тогда вам нужно установить маршрут delete

Route::delete("empresas/eliminar/{id}", "[email protected]");

Ответ 5

Убедитесь, что GET/POST соответствует от клиента к стороне сервера. Это происходило со мной, пока я не понял, что это глупая ошибка, клиент отправлял POST, и маршрут был определен как GET случайно.

Ответ 6

Это может кому-то помочь, поэтому я также внесу свой вклад здесь.

Я столкнулся с той же (или похожей) проблемой. Очевидно, проблема заключалась в том, что запрос POST был заблокирован Modsec по следующим правилам: 350147, 340147, 340148, 350148

После блокировки запроса я был перенаправлен на ту же конечную точку, но, разумеется, как запрос GET и, следовательно, на 405.

Я внес эти правила в белый список и вуаля, ошибка 405 исчезла.

Надеюсь, это кому-нибудь поможет.