繁体   English   中英

jQuery AJAX 后置方法抛出 405(不允许的方法)错误

[英]jQuery AJAX post method throws 405 (Method Not Allowed) error

我是 AJAX 的新手,最近一直在学习 jQuery get() 和 post() 方法的功能。 虽然 get() 方法运行顺利,但我在遇到 post() 方法时却步履蹒跚,每次尝试调用它时都会抛出一个错误:“405(不允许的方法)”。

使用 Bootstrap,我有一个名为 get_post.html 的简单 HTML 文件,每个文件都有一个 div、段落和按钮元素。 Using jQuery, on the click event of the button, I'm sending a name and location using post() method to a php file named mypost.php that will process the data and send a string of message back to get_post.html. 我想在 get_post.html 的段落元素中显示最后的消息。 在尝试实现这一点时,每次单击按钮时,浏览器控制台都会显示上述错误消息。 假设问题与 CORS 策略有某种关系,我必须提到 get_post.html 和 mypost.php 文件位于同一域下的同一文件夹中。 那么为什么会出现 CORS 策略相关错误呢? 此外,我使用 Node.js http-server localhost 来运行 get_post.html 文件。 因此,任何与 localhost 相关的问题也不太可能发生。 此外,我在运行 http-server 时启用和禁用了 CORS,但无济于事。 我也尝试使用 IIS,但同样的问题也出现在那里。

那么,什么可能导致错误,我该如何摆脱它? 由于我是 AJAX 的新手,我不太习惯它的复杂性。 大多数在线解决方案与我的场景无关; 因此,我无法从他们那里获得太多帮助。 如果可能的话,请协助解决这个问题,并提供一个基本级别的示例。

get_post.html 代码:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <!-- Latest compiled and minified CSS -->
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">

        <!-- jQuery library -->
        <script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.js"></script>

        <!-- Popper JS -->
        <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>

        <!-- Latest compiled JavaScript -->
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>

        <title>Document</title>
    </head>
    <body>
        <div class="container">
            <p id="loadedData">This is where data will be loaded from server dynamically.</p>
            <button class="btnLoad btn btn-primary">Load Data</button>
        </div>
        <script type="text/javascript">
             $(document).ready(function() {
                $(".btnLoad").click(function() {
                    // Fetching data using post() method.
                    $.post("mypost.php", {
                        name: "Firstname Lastname",
                        location: "Countryname"
                    }, function(data, status) {
                        $("#loadedData").html(data);
                        alert(status);
                    });
                });
             });
        </script>
    </body>
</html>

mypost.php 代码:

<?php
    $name = $_POST["name"];
    $location = $_POST["location"];

    echo "This is ".$name.". I'm from ".$location".";
?>

感谢和问候!

[...] 每次我尝试调用它时都会抛出一条错误消息:“405(不允许的方法)”。

您正在请求不接受 Post 方法的路由,因此它给出了错误。 这里解释一下:

405 Method Not Allowed 超文本传输协议 (HTTP) 405 Method Not Allowed 响应状态码表示服务器知道请求方法,但目标资源不支持该方法。

服务器必须在 405 状态代码响应中生成 Allow header 字段。 该字段必须包含目标资源当前支持的方法列表。https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405

由于您显然只是使用没有框架或依赖项的纯 PHP,因此您应该检查正在接收哪种类型的请求。

$method = $_SERVER['REQUEST_METHOD'];
print_r($method);

如果上面的代码返回 POST 以外的内容,则说明您在某处遇到了阻塞 Post 请求的内容,请尝试在不使用 Jquery / Ajax 的情况下使用它,如果可行,则可能会根据您的配置发送额外的 Z099FB995346F31C749F6E40DB0F3 或令牌。

我找到了解决方案。 这完全是关于不支持 post() 方法的 PHP 文件。

有两件事帮助我找到了问题的根源。 首先,@Teemu 声明Node.js http-server 不运行 php尽管作为本地主机。 其次,@Macedo_Montalvão 提到: “405 Method Not Allowed 响应状态码表示服务器知道请求方法,但目标资源不支持该方法。” 这引起了我安装专用 PHP 服务器的兴趣。 因此,我在 Windows 上托管了 PHP 和 IIS,如此处和此处所述 此后,我在 IIS 中托管了我的项目文件夹,现在, post() 方法可以完美运行,并且两个页面可以按照要求进行通信。

但是,我的代码中有一个错字。 在 mypost.php 文件中,会有一个. echo语句末尾的$location之后,我忽略了它。 那是抛出 500(内部服务器错误)。

感谢@Teemu 和@Macedo_Montalvão 的建议并分享这两个宝贵的链接。 保持良好!

问候!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM