Ошибка 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 исчезла.
Надеюсь, это кому-нибудь поможет.