Javascript XMLHttpRequest()POST返回405错误;方法不允许
我的html代码:Javascript XMLHttpRequest()POST返回405错误;方法不允许,javascript,php,html,xampp,http-status-code-405,Javascript,Php,Html,Xampp,Http Status Code 405,我的html代码: <h2>Please finalize your details</h2> <form id="details" method="post" class="form"> Full name: <strong name="name_1">ABCDEF</strong><br><br>
<h2>Please finalize your details</h2>
<form id="details" method="post" class="form">
Full name: <strong name="name_1">ABCDEF</strong><br><br>
ID No:<strong name="org_number_1">123</strong><br><br>
Mobile No:<strong name="ph_number_1"">1234567890</strong><br><br>
E-mail: <strong name="email_1">ABC@DEF.COM</strong><br><br>
ID Card: <img src="profile.png" alt="preview" name="image" style="width: 100px; height: 100px;"><br><br>
<button id="go">It's correct</button>
</form>
我正在Visual Studio代码编辑器中执行代码,我的项目位置在:
C:\Users\Abhishek\Desktop\Web dev stuff\XAMPP\htdocs\Stack hack 20
这就是错误:
不仅如此,我还尝试使用获取API,但它也会抛出相同的错误。我现在该怎么办?如何使其工作?我已经为您完成了第一个复选框(ID号)
咖啡馆细节
#特别的{
高度:100px;
宽度:100px;
边框:1px实心;
显示:无;
}
自助餐厅登记
全名:
组织:ID号:
手机号码:
电子邮件:
上传身份证:
登记
函数myFunction(){
var x=document.getElementById(“cb1”)。已选中;
如果(x==true){
document.getElementById(“特殊”).style.display=“块”;
}否则{
document.getElementById(“特殊”).style.display=“无”;
}
}
//var x=document.getElementById(“cb1”)。已选中;
//如果(x==true){
//document.getElementById(“特殊”).style.display=“块”;
//console.log(true)
// }
//if(document.getElementById(“cb2”).checked==true){
//document.getElementById(“特殊”).style.display=“块”;
//console.log(false)
// }
您的代码看起来不错。如果您使用vscode扩展来运行代码,那么这是一个已知的(and)扩展
您可以尝试按照上面链接中的建议更改Live Server扩展上的端口号设置,但最好停止使用Live Server运行此代码
只需启动XAMPP并导航到浏览器中的正确url(注意,您必须在项目文件夹名称中删除空格,例如stack-hack-20-20)
EDIT:其他一些vscode扩展似乎也是如此。当您尝试到达端点时,您将获得405状态。使用GET、HEAD或OPTIONS http方法存在一些限制,因此您可以使用其中一种方法命中端点,或者使用诸如XAMPP之类的Web服务器进行POST、DELETE等操作。错误不在JS中,而是来自服务器。
database\u registration.php
中有什么内容?如果没有对POST
的处理,那么我希望服务器返回405
404
意味着数据库注册。php
不在那里,但405
意味着它在那里,但不允许POST
。检查响应上的allow
标题以了解支持的方法
尝试:
xhr.open(“GET”,“database\u registration.php?”+
“name=“+nme+”&id=“+id+”&phone=“+phone+”&email=“+email+”&img=“+img”);
xhr.send();
改为发出GET
请求
或者,这可能是解析发布内容时出错(误报,因为它应该是
400
或406
),请尝试删除正文部分,看看它是否与子集一起工作。我同意@Keith的说法,此错误代码通常表示服务器不允许使用您使用的请求方法,但我发现并非所有开发人员都在每种情况下使用正确的错误代码
我怀疑您提交的数据在后端可能存在解析问题,因为在发送数据之前没有对其进行URI编码
尝试使用此JavaScript,看看是否会得到不同的结果:
document.getElementById('go').addEventListener('click', submit);
function submit() {
const formData = new FormData();
formData.append("name", document.getElementsByName("name_1")[0].innerHTML);
formData.append("id", document.getElementsByName("org_number_1")[0].innerHTML);
formData.append("phone", document.getElementsByName("ph_number_1")[0].innerHTML);
formData.append("email", document.getElementsByName("email_1")[0].innerHTML);
formData.append("img", document.getElementsByName("image")[0].src);
const xhr = new XMLHttpRequest();
xhr.onload = function() {
const serverResponse = document.getElementById("response");
serverResponse.innerHTML = this.responseText;
};
xhr.open("POST", "database_registration.php");
xhr.send(formData);
}
尝试在后端PHP应用程序上创建支持POST请求的新url端点。因此,从javascript发送的HTTP请求可以使用POST请求
虽然这段代码可能会回答这个问题,但提供关于这段代码为什么和/或如何回答这个问题的附加上下文可以提高其长期价值。这段问题是关于
XMLHttpRequest
AJAX POST,而不是你建议的普通POST-1您应该将开发服务器配置为允许方法和POST请求。检查这个Q/A。
document.getElementById('go').addEventListener('click', submit);
function submit() {
const formData = new FormData();
formData.append("name", document.getElementsByName("name_1")[0].innerHTML);
formData.append("id", document.getElementsByName("org_number_1")[0].innerHTML);
formData.append("phone", document.getElementsByName("ph_number_1")[0].innerHTML);
formData.append("email", document.getElementsByName("email_1")[0].innerHTML);
formData.append("img", document.getElementsByName("image")[0].src);
const xhr = new XMLHttpRequest();
xhr.onload = function() {
const serverResponse = document.getElementById("response");
serverResponse.innerHTML = this.responseText;
};
xhr.open("POST", "database_registration.php");
xhr.send(formData);
}