首页 > 解决方案 > Laravel:MethodNotAllowedHttpException 错误,AJAX 调用资源控制器后没有消息

问题描述

我正在更新数据库中某些模型的值,但是当我点击提交时,我收到以下错误:

“消息:”,异常:“Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException”,文件:“C:\xampp\htdocs\Restaurante1\vendor\laravel\framework\src\Illuminate\Routing\RouteCollection.php”,行: 255"

这是我的 JQuery 代码:

var formData = new FormData();
            formData.append('id', $(this).attr("data-id"));
            formData.append('first', $('#schedules_morning').val());
            formData.append('second', $('#schedules_night').val());
            
            $.ajax({
            

                
                async: true,
                cache: false,
                url: '/schedules',
                type: 'PUT',
                data: 
                {
                formData
                },
                dataType: 'JSON',
                processData: false,
                contentType: false,
            
                success: function (data) { 
                    $('.form_valid_container').fadeIn().html('<span class="form_valid_text">✓ '+ data.success +'</span>');
                    form.trigger("reset");
                    console.log(data.success);
                },
            
                error: function (data){
                    var errors = data.responseJSON;
                    console.log(errors);
                
                    $.each(errors , function(){
                        $('.form_error_container').fadeIn().html('<span class="form_error_text">✘ '+ errors.message +'</span>')
                    }); 
                }
                
                
            });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我将请求发送到资源控制器路由:

Route::resource('/schedules','ScheduleController');

public function update(Request $request)
    {
        $schedule = Schedule::findOrFail($id);
        $schedule->morning = $request->morning;
        $schedule->night = $request->night;
        $schedule->save();
        
        return response()->json([
        
            'schedule' => $schedule,
            'success' => 'Horario actualizado correctamente',
        ]);
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

标签: phpjqueryajaxlaravel

解决方案


PHP(Laravel)只是欺骗了 PUT 和 DELETE 请求,因此在 laravel 中的所有 put 请求中,他们放置了一个名为_methodvalue的隐藏变量put,laravel 再次验证了该方法与 post 请求。因此,像下面这样替换您的代码,它应该可以工作。

var formData = new FormData();
        formData.append('id', $(this).attr("data-id"));
        formData.append('first', $('#schedules_morning').val());
        formData.append('second', $('#schedules_night').val());
        formData.append('_method', 'put');

        $.ajax({



            async: true,
            cache: false,
            url: '/schedules',
            type: 'POST',
            data: 
            {
            formData
            },
            dataType: 'JSON',
            processData: false,
            contentType: false,

            success: function (data) { 
                $('.form_valid_container').fadeIn().html('<span class="form_valid_text">✓ '+ data.success +'</span>');
                form.trigger("reset");
                console.log(data.success);
            },

            error: function (data){
                var errors = data.responseJSON;
                console.log(errors);

                $.each(errors , function(){
                    $('.form_error_container').fadeIn().html('<span class="form_error_text">✘ '+ errors.message +'</span>')
                }); 
            }


        });

推荐阅读