Javascript 提交电子邮件表单而不刷新页面无JQUERY

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

我试图使表单提交而不刷新页面。我不能使用jQuery来完成这一点。我似乎在任何地方都找不到任何不提及它的解决方案,所以我只想知道我到目前为止所做的有什么错,以及如何修复它

html

PHP的良好措施

<?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;
      }