簡體   English   中英

當表單中沒有任何內容但無法運行Ajax時,AJAX / PHP / JQUERY郵件聯系表單會給出正確的錯誤消息

[英]AJAX/PHP/JQUERY mailing contact form gives correct error message when nothing is in form but fails to run Ajax

我正在按照以下教程使用PHP,AJAX和JQUERY在我的網站上放置一個表單,這些表單會將表單信息發送到我的電子郵件中:

http://www.spruce.it/noise/simple-ajax-contact-form/

問題是,當我在文檔外部准備好jquery時,我什么都沒有收到,當我將其放在文檔中准備好時,我得到了錯誤文本,但是當字段中有信息時,什么也沒有發生。 請,有人可以看看我的html,jquery,php或AJAX可能是什么問題嗎? 我要拔頭發了。 我正在Wampserver中對其進行測試。

HTML文件位於PHP文件的根目錄中。 在根目錄中,有一個Javascript所在的文件夾“ includes”。這是每個文件夾的相關代碼:

HTML:

<form id="repairform" method="post"> 
   <p id="p1">Name:</p> 
   <input id="one" type="text" name="name" /> 

   <p id="p2">How would you prefer to be reached?: </p> 
   <select id="two" name="Contact methods">
      <option value="Phone">Email</option>
      <option value="Email">Phone</option>
   </select> 

   <p id="p3">What kind of computer are you having trouble with?</p>
   <p id="p3-2">Give as much or as little info. as you'd like.</p>
   <p id="p3-3">(Laptop PC, desktop Macintosh, etc)</p>
   <textarea id="four" name="pc type" rows="3" cols="30"></textarea>

   <p id="p4">What problems are you having with your computer/ what needs to be fixed?</p>
   <textarea id="five" name="problem" rows="5" cols="30"></textarea>
   <input id="three" type="submit" value="Submit Request" />

   <p id="p5">What is your Email?</p> 
   <input id="six" type="text" name="Email/Phone" /> 

   <p id="p7">What is your Phone Number?</p>
   <input id="eight" type="text" name="Email/Phone2" /> 

   <p id="p6">What time of day would you prefer to be reached?</p>
   <input id="seven" type="text" name="Preferred Contact Time" /> 
</form>

jQuery的:

$(document).ready(function () {

   $("#repairform").submit(function (e) {
      e.preventDefault();

      if (!$("#six").val()) {
         $("#six").val("shanew@ufl.edu");
      }

      var name = $("#one").val();
      var email = $("#six").val();
      var text = $("#five").val();
      var reachpreference = $("#two").val();
      var computertype = $("#four").val();
      var phonenumber = $("#eight").val();
      var timeofday = $("#seven").val();

      var dataString = 'name=' + name + '&email=' + email + '&text=' + text
      + '&reachpreference=' + reachpreference + '&computertype=' + computertype
      + '&phonenumber=' + phonenumber + '&timeofday=' + timeofday;

      function isValidEmail(emailAddress) {
         var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
         return pattern.test(emailAddress);
      };

      if (isValidEmail(email) && (text.length > 2) && (name.length > 1)) {
         $.ajax({
            type: "POST",
            url: "../functions.php",
            data: dataString,
            success: function () {
               alert("Thank you! Your message has been delivered. I will be back with you shortly");
            }
         });
      } else {
         alert("Some of the form information was not filled out correctly. Ensure all of the correct fields are filled out.");
      }

      return false;
   });

PHP:

 <?php
 // Email Submit
 if (isset($_POST['email']) && isset($_POST['name']) && isset($_POST['text'])){

    //send email
    mail("shanew@ufl.edu", "Contact Form: ".$_POST['name'],
    $_POST['text'], $_POST['reachpreference'], $_POST['computertype'] 
    $_POST['phonenumber'], $_POST['timeofday'], "From:" . $_POST['email']);

 }
 ?>

采用

data: $('#repairform').serializeArray()

而不是您要創建的數據datastring對象。

數據datastring將被視為字符串,並且您將永遠無法使用$_POST['text']和所有字符串來訪問它。 您可以嘗試使用$_GET代替。 datastring以這種方式訪問​​數據datastring

我想您會錯過一些結帳的分支機構}) ;

而且我認為您應該將name屬性用於將在php中使用的變量名稱

<form id="theForm">
    <input type="text" name="email" />
</form>

並且在javascript中,您可以使用序列化功能,因此行數更少,更易於閱讀。

$.ajax({
    type:'POST'
    url:'../functions.php'
    data:$('#theForm').serialize();
})

和在PHP

echo $_POST['email']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM