代码之家  ›  专栏  ›  技术社区  ›  Mav

AJAX请求中不允许使用laravel405方法

  •  -2
  • Mav  · 技术社区  · 7 年前

    405 method not allowed 上传到服务器时出现异常。解决方案 this 问题和 this 这个问题不适合我。

    这是控制器。

        public function DeleteMultipleProjects(Request $request){
            $json = $request->projectsToDelete;
            $to_delete = collect([]);
    
            $projects = json_decode($json);
            foreach ($projects as $project) {
                $to_delete->push($project->id);
            }
    
            Project::destroy($to_delete);
        }
    

    这是routes文件中相应的条目。

    Route::post('/ajax/dashboard/delete-projects', 'ProjectController@DeleteMultipleProjects');
    

        $.ajax({
            url: '/ajax/dashboard/delete-projects',
            method: 'POST',
            data: {
                projectsToDelete: JSON.stringify(vThis.selectedProjects),
            },
            complete: function(){
                vThis.refreshProjects();
            }
        });
    

    这就是示例测试用例的数据。

    [{"id":140,"name":"a","updated_at":"Sun, Oct 21, 2018 4:31 AM","selected":true,"selectHovering":false},{"id":139,"name":"New Project","updated_at":"Sun, Oct 21, 2018 4:31 AM","selected":true,"selectHovering":false}]
    

    编辑 值得注意的是,在整个应用程序中,我还有其他对routes的AJAX调用,它们工作得很好。

    3 回复  |  直到 7 年前
        1
  •  0
  •   Murat Tutumlu    7 年前

    你好像丢失了csrf令牌

    将ajax post数据更新为:

    $.ajax({
        url: '/ajax/dashboard/delete-projects',
        method: 'POST',
        data: {
            projectsToDelete: JSON.stringify(vThis.selectedProjects),
            _token: '{{ csrf_token() }}',
        },
        complete: function(){
            vThis.refreshProjects();
        }
    });
    
        2
  •  0
  •   Devon Bessemer    7 年前

    清除路由缓存:

    php artisan route:clear
    

    php artisan route:list --path=ajax/dashboard/delete-projects
    

    如果route:list confirms POST路由已经存在,但是仍然收到一个405,另一个可以导致缓存路由的东西是opcache,它没有重新验证时间戳,您可能需要重新启动php进程来清除。

        3
  •  0
  •   Mav    7 年前

    id 我想删除的,并因此更新了控制器只是 destroy 请求。如果有人有解释,我很好奇。