Javascript AJAX请求中不允许使用Laravel 405方法

Javascript AJAX请求中不允许使用Laravel 405方法,javascript,ajax,laravel,laravel-5,Javascript,Ajax,Laravel,Laravel 5,该代码在我的本地开发环境中运行良好,但在我将其上载到服务器时,给出了一个405方法不允许的异常。问题和问题的解决方案对我不起作用 这是控制器 public function DeleteMultipleProjects(Request $request){ $json = $request->projectsToDelete; $to_delete = collect([]); $projects = json_decode($js

该代码在我的本地开发环境中运行良好,但在我将其上载到服务器时,给出了一个405方法不允许的异常。问题和问题的解决方案对我不起作用

这是控制器

    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');
这里是对URL的AJAX调用

    $.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}]
我如何克服这个错误,为什么这只发生在生产中


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

您似乎缺少csrf令牌

将ajax post数据更新为:

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

Laravel中的405错误表示您正在使用的HTTP方法的路由不存在

如果您在生产过程中收到此错误,但不是在本地收到,则表明路由文件已过时或已缓存

使用以下命令清除路由缓存:

php artisan route:clear
验证您的投递路线是否存在:

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

如果route:list确认您的POST路由存在,但您仍然收到405,那么导致缓存路由的另一个原因是没有重新验证时间戳的opcache,您可能需要重新启动php进程才能清除。

问题出在我发送的数据中。我不知道为什么,但是我的服务器不喜欢整个projects数组,所以我更新了它,只发送了一个我想删除的id数组,然后更新了控制器,只销毁了请求。如果有人有解释,我很好奇。

请求是否直接发送到应用服务器?你是什么意思?AJAX请求直接发送到服务器,是的。值得注意的是,在我的整个应用程序中,我还有其他对路由的AJAX调用,它们工作得很好。通常,在企业环境中,请求通过分层拱门路由。哦,是的,不,这里不是这样。请从devtools发布请求信息。我以前全局设置过csrf令牌。很抱歉没有提到这一点。我面临的另一个常见问题是,在到达您定义的路线之前,可能会发现路线。将ajax的路由定义放在路由列表的顶部缺少CSRF标记不会导致405错误。@Devon I通过更改表单数据以发送单个线性阵列来解决此问题。我添加了一个答案。尝试了所有这些,仍然得到了405。然后发布路由列表输出和opcache设置。是否重新启动php进程以清除opcache?