【问题标题】:Error 405 (PUT Method Not Allowed) Laravel 5.4 Resource using Ajax错误 405(不允许 PUT 方法)使用 Ajax 的 Laravel 5.4 资源
【发布时间】:2018-08-25 21:37:06
【问题描述】:

在 routes.php 中:

Route::resource('/users','UserController');

ajax.js:

 $.ajax({
            url: "/users",
            type:'POST',
            data:$('.edit-user-form').serialize(),
            success: function(data) {
                console.log('success');
                console.log(data);
            },
            error: function(data){
                console.log('error');
                console.log(data);
                });
            }
        });

blade.php:

<form class="edit-user-form" action="/users" method="POST">
     {{ method_field('PUT') }}
     {{csrf_field()}}
.......my inputs here .....
</form>

Controller.php:

 public function store(Request $request)
{
    return response()->json(['response' => 'This is POST method']);
}
  public function update(Request $request, $id)
{
    return response()->json(['response' => 'This is PUT method']);
}

在 POST 方法中它显示在控制台中:

success
Object { response: "This is POST method" }

当我将{{ method_field('PUT') }} 添加到我的form 时,它会显示在控制台中:

error
status: 405
statusText: "Method Not Allowed"

请帮我一下,我卡住了

【问题讨论】:

    标签: jquery ajax laravel laravel-5 laravel-routing


    【解决方案1】:

    我认为您使用了错误的操作网址。改成

    <form class="edit-user-form" action="{{route('users.update',$user->id)}}" method="post">
     {{csrf_field()}}
     {{method_field('PUT')}}
    .......my inputs here .....
    </form>
    
    
    $.ajax({
            url: '{{route('users.update',$user->id)}}',
            type:'POST',
            data:$('.edit-user-form').serialize(),
            success: function(data) {
                console.log('success');
                console.log(data);
            },
            error: function(data){
                console.log('error');
                console.log(data);
                });
            }
        });
    

    【讨论】:

    • 不,它是正确的,我认为问题是AJAX 不能用update 支持路由resource,但是用POST 方法保存新记录可以正常工作
    【解决方案2】:

    由于您使用的是资源路由。请将ajax请求类型更改为PATCH

    $.ajax({
            url: "/users",
            type:'PATCH',
           ......
            });
    

    同样在form方法中,将POST改为PATCH

    <form class="edit-user-form" action="/users" method="PATCH">
         {{csrf_field()}}
    .......my inputs here .....
    </form>
    

    查看 Laravel 文档

    【讨论】:

    • 你也可以用 PUT 代替 PATCH
    • 您是否检查了 devtool 上网络选项卡中的 request 类型?
    • 我不明白你的意思?
    • 在 google chrome/firefox 上按 ctrl+shift+i,转到network 标签,查看您的 ajax 发送的请求类型是什么
    • 它正在发送,但它在Status 405 Method NOT Allowed 中显示为PUTPATCH
    猜你喜欢
    • 2018-07-06
    • 2014-10-04
    • 2019-07-29
    • 2018-01-25
    • 2018-03-07
    • 2017-05-31
    • 2015-10-16
    • 2017-07-22
    • 2023-03-23
    相关资源
    最近更新 更多