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

Ger*_*tiz 35 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>
Run Code Online (Sandbox Code Playgroud)

HTML

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

    {!!Form::close() !!}
Run Code Online (Sandbox Code Playgroud)

调节器

public function delete($id, \Request $request){
        return $id;
    }
Run Code Online (Sandbox Code Playgroud)

Jquery错误是http://localhost/laravel5.1/public/empresas/eliminar/5 405(Method Not Allowed).

网址值是

http://localhost/laravel5.1/public/empresas/eliminar/5
Run Code Online (Sandbox Code Playgroud)

而数据值是

_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.
Run Code Online (Sandbox Code Playgroud)

如果我改为$.get请求它工作正常,但我想做一个帖子请求.

有人可以帮帮我吗?

谢谢.

编辑!!

路线

Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => 'CompaniesController@delete']);
Run Code Online (Sandbox Code Playgroud)

Jee*_*usu 46

methodNotAllowed异常表示您请求的HTTP方法不存在路由.

您的表单已设置为发出DELETE请求,因此您的路由需要Route::delete()用来接收此请求.

Route::delete('empresas/eliminar/{id}', [
        'as' => 'companiesDelete',
        'uses' => 'CompaniesController@delete'
]);
Run Code Online (Sandbox Code Playgroud)


cor*_*aiu 8

就我而言,路由器中的路由是:

Route::post('/new-order', 'Api\OrderController@initiateOrder')->name('newOrder');

并从客户端应用程序我将请求发布到:

https://my-domain/api/new-order/

所以,由于尾随斜杠,我得到了 405。希望它对某人有帮助


dav*_*vsp 7

您的routes.php文件需要正确设置.

我假设您当前的设置是这样的:

Route::post('/empresas/eliminar/{id}','CompanyController@companiesDelete');
Run Code Online (Sandbox Code Playgroud)

或者其他的东西.改为定义删除方法的路由.

Route::delete('/empresas/eliminar/{id}','CompanyController@companiesDelete');
Run Code Online (Sandbox Code Playgroud)

现在,如果您使用Route资源,则用于'DELETE'方法的默认路由名称是.destroy.改为在该函数中定义删除逻辑.


Arj*_*jun 6

如果您在开发过程中没有出现此类错误,并且它仅在生产中出现,请尝试

php artisan route:list查看该路线是否存在。

如果不尝试

php artisan route:clear清除您的缓存。

这对我有用。