我试图用jQuery做一个POST请求,但我得到一个错误405(方法不允许),我正在使用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(方法不允许)。
网址值为
http://localhost/laravel5.1/public/empresas/eliminar/5
,数据值为
_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.
如果我更改为$.get
请求它可以正常工作,但我想发布帖子请求。
有人可以帮助我吗?
感谢。
EDIT !!
路线
Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => 'CompaniesController@delete']);
答案 0 :(得分:40)
methodNotAllowed
异常表示您请求的HTTP方法不存在路由。
您的表单已设置为发出DELETE
请求,因此您的路由需要使用Route::delete()
才能收到此请求。
Route::delete('empresas/eliminar/{id}', [
'as' => 'companiesDelete',
'uses' => 'CompaniesController@delete'
]);
答案 1 :(得分:7)
您的routes.php文件需要正确设置。
我假设您当前的设置如下:
Route::post('/empresas/eliminar/{id}','CompanyController@companiesDelete');
或者其他什么。改为为删除方法定义路由。
Route::delete('/empresas/eliminar/{id}','CompanyController@companiesDelete');
现在,如果您使用的是Route资源,则默认路由名称将用于&#39; DELETE&#39;方法是.destroy。改为在该函数中定义删除逻辑。
答案 2 :(得分:0)
如果您使用的是资源路由,那么在表单的HTML正文中,您可以使用 method_field帮助器,如下所示:
<form>
{{ csrf_field() }}
{{ method_field('PUT') }}
<!-- ... -->
</form>
它将创建具有方法类型的隐藏表单输入,该输入由Laravel 5.5+正确地插入。
从Laravel 5.6开始,您可以在模板中使用以下Blade指令:
<form>
@method('put')
@csrf
<!-- ... -->
</form>
希望这对以后的人有帮助。
答案 3 :(得分:0)
在表单中使用方法删除时,必须设置路由删除
Route::delete("empresas/eliminar/{id}", "CompaniesController@delete");
答案 4 :(得分:0)
这可能会对某人有所帮助,所以我也将自己的意见也放在这里。
我遇到了相同(或相似)的问题。显然,问题出在POST请求被Modsec阻止,其规则如下:350147、340147、340148、350148
在阻止请求之后,我被重定向到了同一端点,但是当然是GET请求,因此也重定向到了405。
我将这些规则列入了白名单,瞧瞧,405错误消失了。
希望这对某人有帮助。
答案 5 :(得分:0)
在我的情况下,路由器中的路由为:
include 'QueryHelper.php';
public function filterContacts($group, $email, $phone){
$query = 'SELECT * FROM contacts WHERE user_id = :user_id ';
$queryHelper = new QueryHelper($group, $email, $phone, $query, $this->db);
$this->db = $queryHelper->UpdateBindings();
$this->db->bind(':user_id', $user_id);
return $this->db->resultSet();
}
并且从客户端应用程序中,我将请求发布到:
Route::post('/new-order', 'Api\OrderController@initiateOrder')->name('newOrder');
因此,由于斜杠的结尾,我得到了405。希望它能对某人有所帮助