[英]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.