Javascript 提交电子邮件表单而不刷新页面无JQUERY
我试图使表单提交而不刷新页面。我不能使用jQuery来完成这一点。我似乎在任何地方都找不到任何不提及它的解决方案,所以我只想知道我到目前为止所做的有什么错,以及如何修复它 html PHP的良好措施Javascript 提交电子邮件表单而不刷新页面无JQUERY,javascript,php,ajax,Javascript,Php,Ajax,我试图使表单提交而不刷新页面。我不能使用jQuery来完成这一点。我似乎在任何地方都找不到任何不提及它的解决方案,所以我只想知道我到目前为止所做的有什么错,以及如何修复它 html PHP的良好措施 <?php $fName = $_POST['firstName']; $lName = $_POST['lastName']; $email = $_POST['email']; $message = $_POST['message']; $to = 'xxx@xxx.com'; $su
<?php
$fName = $_POST['firstName'];
$lName = $_POST['lastName'];
$email = $_POST['email'];
$message = $_POST['message'];
$to = 'xxx@xxx.com';
$subject = 'the subject';
$message = 'FROM: ' . $fName . ' ' . $lName . ' Email: ' . $email . 'Message: '. $message;
$headers = 'From: ' . $to . "\r\n";
$mailRegex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
if (preg_match($mailRegex, $email)) { // this line checks that we have a valid email address
mail($to, $subject, $message, $headers);
echo "Your email was sent!";
}
最简单的方法就是在文档中有一个iframe,然后用CSS隐藏它。给iframe一个名称,然后在表单上设置一个目标属性,该属性引用隐藏的iframe
这将导致表单在隐藏的iframe中发布,而整个页面将不会重新加载
甚至不需要javascript
如果需要处理帖子的结果,只需使用iframe上的onload事件来检测和处理php页面的输出,该页面现在位于iframe中。有两种方法可以修复它:
- 表单
onsubmit
属性中的表达式应返回false
- 您应该在
submit
event或input[type=“submit”]表单的处理程序中调用event.preventDefault
方法,或者单击
event
明白了
我没有给出表单中要发送的任何值。我通过使start()函数如下所示来修复它:
function start() {
var xmlhttp = new XMLHttpRequest();
var contentDiv = document.getElementById("success");
var email = document.getElementById('email').value;
var fName = document.getElementById('firstName').value;
var lName = document.getElementById('lastName').value;
var mes = document.getElementById('message').value;
xmlhttp.open("POST", "processor.php", true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
contentDiv.innerHTML=xmlhttp.responseText;
alert('message sent!');
}
}
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
xmlhttp.send('email=' + encodeURIComponent(email) + '&firstName=' + encodeURIComponent(fName) + '&lastName=' + encodeURIComponent(lName) + '&message=' + encodeURIComponent(mes));
return false;
}
我之前曾尝试使用验证函数中的值,但存在与此相关的范围问题。这很有效!!!我是一个真正的程序员(有点) 您的电子邮件验证将在许多有效电子邮件地址工具中失败,但实际上它需要使用Javascript。请在表单元素上尝试此onsubmit=“validate(this);return false;”
。您还可以通过调用clickEvent处理程序中的event.preventDefault()禁用提交按钮的默认行为
<?php
$fName = $_POST['firstName'];
$lName = $_POST['lastName'];
$email = $_POST['email'];
$message = $_POST['message'];
$to = 'xxx@xxx.com';
$subject = 'the subject';
$message = 'FROM: ' . $fName . ' ' . $lName . ' Email: ' . $email . 'Message: '. $message;
$headers = 'From: ' . $to . "\r\n";
$mailRegex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
if (preg_match($mailRegex, $email)) { // this line checks that we have a valid email address
mail($to, $subject, $message, $headers);
echo "Your email was sent!";
}
function start() {
var xmlhttp = new XMLHttpRequest();
var contentDiv = document.getElementById("success");
var email = document.getElementById('email').value;
var fName = document.getElementById('firstName').value;
var lName = document.getElementById('lastName').value;
var mes = document.getElementById('message').value;
xmlhttp.open("POST", "processor.php", true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
contentDiv.innerHTML=xmlhttp.responseText;
alert('message sent!');
}
}
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
xmlhttp.send('email=' + encodeURIComponent(email) + '&firstName=' + encodeURIComponent(fName) + '&lastName=' + encodeURIComponent(lName) + '&message=' + encodeURIComponent(mes));
return false;
}