错误405(方法不允许)Laravel 5

时间:2015-07-25 04:08:46

标签: php jquery laravel laravel-5

我试图用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']);

6 个答案:

答案 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。希望它能对某人有所帮助