Javascript XMLHttpRequest()POST返回405错误;方法不允许

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>

我的html代码:

    <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);

}