当前位置: 首页 > 知识库问答 >
问题:

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

东方志尚
2023-03-14

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

这是控制器。

    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调用,它们工作得很好。

共有3个答案

梁宏才
2023-03-14

问题在于我发送的数据。我不知道为什么,但我的服务器不喜欢整个项目数组,所以我更新了它,只发送了一个我想删除的ids数组,并因此将控制器更新为只destroy请求。如果有人有解释,我很好奇。

酆俊远
2023-03-14

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

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

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

php artisan route:clear

验证您的投递路线是否存在:

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

如果path: list确认您的POST路由存在,但您仍然收到405,另一件可能导致缓存路由的事情是opache而不重新验证时间戳,在这种情况下,您可能需要重新启动php进程来清除。

沈成天
2023-03-14

看来你丢了csrf代币

将ajax post数据更新为:

$.ajax({
    url: '/ajax/dashboard/delete-projects',
    method: 'POST',
    data: {
        projectsToDelete: JSON.stringify(vThis.selectedProjects),
        _token: '{{ csrf_token() }}',
    },
    complete: function(){
        vThis.refreshProjects();
    }
});
 类似资料:
  • 我正在使用ajax进行表单更新。当我在ajax中使用GET方法时,它工作得很好,但当我使用Post方法时,它抛出了错误405 method,这是不允许的。我正在本地主机上测试这个。我以前在localhost中做过,效果很好。顺便说一句,我用的是Laravel5.2。 这是我的ajax代码。 这是我在视图中使用的脚本 这是我的路线 当ajax函数和路由中的方法更改为GET时,它会打印在控制台中传递的

  • 这是我的jQuery代码,我用它来做一个Ajax请求: 这是我写的路线代码: 每当我在这个URL上发布ajax请求时,它都会给我一个405(不允许使用方法)。 为什么会发生这种错误?

  • 我正在尝试使用AJAX POST将我在第三方JS函数(支付网关)的回调函数中得到的响应保存到我的服务器,但我得到的状态代码为-405方法不允许。我得到的响应是-消息:请求方法'POST'不受支持,描述:所请求的资源不允许指定的HTTP方法。 我有以下Javascript客户端代码- 相应的服务器端Spring MVC处理程序- 关于“405方法不允许”的StackOverflow的大多数答案都导致

  • 问题内容: 在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展。 我在脚本顶部仅添加了以下两行,以使它们能够做到: 现在我的问题是:这里是否遗漏了任何安全方面的考虑?这个简单的解决方案会带来严重的问题吗? 如果是这样,什么是更好的解决方案? 感谢您的回复。 问题答案: 如上所述,任何人都可以随时向您的页面发送请求:因此,您需要考虑的主

  • 在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展<我只是在我的脚本顶部添加了这两行,让他们完成这项任务: 现在我的问题是:这里有我错过的任何安全考虑吗?这个简单的解决方案会产生严重的问题吗? 如果是,更好的解决方案是什么? 感谢您的回复。

  • 我试图从我的新Angular应用程序中调用REST web服务。当发出请求时,我会得到以下错误: XMLHttpRequest无法加载http://localhost:8080/WebService。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源“http://localhost”。 我发现这是因为浏览器不允许这样的操作。 编辑我也试着把它添加到我的angular应用程序中: