AJAX 找不到 PHP- 文件。它returns"POST 405 (Method Not Allowed)"
AJAX Could not find PHP-file. It returns "POST 405 (Method Not Allowed)"
我是 PHP 的新手,正在尝试学习如何设置一个选项,让人们可以通过单击提交按钮来发送电子邮件。但是我已经多次检查了所有代码,但无法弄清楚我做错了什么。
控制台显示:
ajax.js:24 POST http://localhost:8081/send_email.php 405 (Method Not Allowed)
访问被拒绝语法:ajax.open("POST", "send_email.php");;`
文件夹结构:
send_email.php
index.html
JS
-ajax.js //
怎么弄到这么小的东西运行。需要你们的帮助才能得到这个东西 运行,另外你看我快到了。
function _(id) {
return document.getElementById(id);
}
function submitForm() {
_("button").disbaled = true;
_("status").innerHTML = "Please wait...";
var formdata = new FormData();
formdata.append( "email", _("email").value );
formdata.append( "subject", _("subject").value );
formdata.append( "message", _("message").value );
var ajax = new XMLHttpRequest();
ajax.open("POST", "send_email.php"); // parameter: method, url, boolean (optional)
ajax.onreadystatechange = function() {
if(ajax.readyState == 4 && ajax.status == 200) {
if(ajax.responseText == "success") {
_("contact-form").innerHTML = "<h2>Thanks, your email is sent successfully</h2>!";
} else {
_("status").innerHTML = ajax.responseText;
_("mybtn").disabled = false;
}
}
}
ajax.send( formdata );
}
服务器端代码:
<?php
if ( isset($_POST["email"]) && isset($_POST["subject"]) && isset($_POST["message"]) ) {
$email = $_POST["email"];
$subject = $_POST["subject"];
$message = nl2br($_POST["message"]);
$to = "you@hotmail.com";
$from = $email;
$subject = "Contact From Message";
$message = "<b>Email Address:</b> ".$email. " <br><b>Subject: </b> ".$subject." <br><p> ".$message." </p>";
$headers = "From: $from\n";
$headers = "MIME-version: 1.0\n";
$headers = "Content-type: text/html; charset=iso-8859-1\n";
if ( mail($to, $subject, $message, $headers)) {
echo "success";
} else {
echo "The server failed to send the message. Please try again later.";
}
}
?>
<body>
<form id="contact-form" onsubmit="submitForm(); return false;">
<label>
<span class="contact">Your Email</span>
<input id="email" class="contact_input" type="text" name="email" placeholder="name@hotmail.com">
</label>
<label>
<span class="contact">Subject</span>
<input id="subject" class="contact_input contactinfo" type="text" name="message">
</label>
<label>
<span class="contact">Message</span>
<textarea id="message" class="contact_input contactinfo" type="text"></textarea>
</label>
<label>
<input id="button" type="submit" value="SEND">
<span id="status"></span>
</label>
</form>
</body>
您目前正在尝试同时调试多个组件 - 这绝不是成功的秘诀。错误消息似乎作为 HTTP 状态从服务器返回(您是否检查了日志以进行验证?)并且它似乎并未在您的 PHP 代码中触发。我建议您应该尝试的第一件事是:
<pre>
<?php
print_r($_POST);
?>
</pre>
<form method='POST'>
<input type='text' name='sometext' value='hello world'>
<input type='submit' name='submit' value='submit'>
</form>
看看你是否遇到同样的错误。我怀疑会是这种情况,这意味着您的服务器配置、Web 应用程序防火墙配置或您没有告诉我们的 PHP 自动前置(或其他 PHP 代码)有问题。
如果你是 运行 两台服务器,它们可能不在同一个端口上 运行...你必须更改 AJAX url 以将正确的端口。
现在您正在调用 localhost:8081/send_email.php
,这无法通过您的 Node 服务器获得(并且 PHP 代码当然甚至不会被评估)。
更改为 URL 并将完整的 URL 页面包含在您的 Apache 服务器上,并使用正确的端口。
我是 PHP 的新手,正在尝试学习如何设置一个选项,让人们可以通过单击提交按钮来发送电子邮件。但是我已经多次检查了所有代码,但无法弄清楚我做错了什么。
控制台显示:
ajax.js:24 POST http://localhost:8081/send_email.php 405 (Method Not Allowed)
访问被拒绝语法:ajax.open("POST", "send_email.php");;`
文件夹结构:
send_email.php
index.html
JS
-ajax.js //
怎么弄到这么小的东西运行。需要你们的帮助才能得到这个东西 运行,另外你看我快到了。
function _(id) {
return document.getElementById(id);
}
function submitForm() {
_("button").disbaled = true;
_("status").innerHTML = "Please wait...";
var formdata = new FormData();
formdata.append( "email", _("email").value );
formdata.append( "subject", _("subject").value );
formdata.append( "message", _("message").value );
var ajax = new XMLHttpRequest();
ajax.open("POST", "send_email.php"); // parameter: method, url, boolean (optional)
ajax.onreadystatechange = function() {
if(ajax.readyState == 4 && ajax.status == 200) {
if(ajax.responseText == "success") {
_("contact-form").innerHTML = "<h2>Thanks, your email is sent successfully</h2>!";
} else {
_("status").innerHTML = ajax.responseText;
_("mybtn").disabled = false;
}
}
}
ajax.send( formdata );
}
服务器端代码:
<?php
if ( isset($_POST["email"]) && isset($_POST["subject"]) && isset($_POST["message"]) ) {
$email = $_POST["email"];
$subject = $_POST["subject"];
$message = nl2br($_POST["message"]);
$to = "you@hotmail.com";
$from = $email;
$subject = "Contact From Message";
$message = "<b>Email Address:</b> ".$email. " <br><b>Subject: </b> ".$subject." <br><p> ".$message." </p>";
$headers = "From: $from\n";
$headers = "MIME-version: 1.0\n";
$headers = "Content-type: text/html; charset=iso-8859-1\n";
if ( mail($to, $subject, $message, $headers)) {
echo "success";
} else {
echo "The server failed to send the message. Please try again later.";
}
}
?>
<body>
<form id="contact-form" onsubmit="submitForm(); return false;">
<label>
<span class="contact">Your Email</span>
<input id="email" class="contact_input" type="text" name="email" placeholder="name@hotmail.com">
</label>
<label>
<span class="contact">Subject</span>
<input id="subject" class="contact_input contactinfo" type="text" name="message">
</label>
<label>
<span class="contact">Message</span>
<textarea id="message" class="contact_input contactinfo" type="text"></textarea>
</label>
<label>
<input id="button" type="submit" value="SEND">
<span id="status"></span>
</label>
</form>
</body>
您目前正在尝试同时调试多个组件 - 这绝不是成功的秘诀。错误消息似乎作为 HTTP 状态从服务器返回(您是否检查了日志以进行验证?)并且它似乎并未在您的 PHP 代码中触发。我建议您应该尝试的第一件事是:
<pre>
<?php
print_r($_POST);
?>
</pre>
<form method='POST'>
<input type='text' name='sometext' value='hello world'>
<input type='submit' name='submit' value='submit'>
</form>
看看你是否遇到同样的错误。我怀疑会是这种情况,这意味着您的服务器配置、Web 应用程序防火墙配置或您没有告诉我们的 PHP 自动前置(或其他 PHP 代码)有问题。
如果你是 运行 两台服务器,它们可能不在同一个端口上 运行...你必须更改 AJAX url 以将正确的端口。
现在您正在调用 localhost:8081/send_email.php
,这无法通过您的 Node 服务器获得(并且 PHP 代码当然甚至不会被评估)。
更改为 URL 并将完整的 URL 页面包含在您的 Apache 服务器上,并使用正确的端口。