2014-02-07 18 views
1

我是JQuery的新手,並沒有使用AJAX。我在網上搜索了幾天沒有完整的答案。沒有刷新的JQuery AJAX表單處理

我試圖通過AJAX通過電子郵件發送表單,而JQuery隱藏表單並顯示其他數據。 JQuery部分在頁面切換時顯示正確的數據,但表單信息不通過電子郵件發送。

的JQuery/AJAX

$(document).ready(function() { 
     //When the form is submitted... 
     $('form').on('submit',function(e) { 
      //Send the serialized data to mailer.php. 
      $.ajax({ 
       url:'mailer.php', 
       data:$(this).serialize(), 
       type:'POST', 
       success:function(data){ 
       console.log(data); 
       $("#success").show().fadeOut(5000); //=== Show Success Message== 
       }, 
       error:function(data){ 
       $("#error").show().fadeOut(5000); //===Show Error Message==== 
       } 
      }); 
      e.preventDefault(); //=== To Avoid Page Refresh and Fire the Event "Click"=== 
      //$.post("mailer.php"); 
      //Take our response, and replace whatever is in the "form2" 
      //div with it. 
      $('#form1').hide(); 
      $('#form2').show(); 
     }); 
    }); 

PHP提交文件mailer.php

<?php   
     //Grab Posted Data 
     $fname = strip_tags(htmlentities($_POST['fname'])); 
     $lname = strip_tags(htmlentities($_POST['lname'])); 
     $name = $fname." ".$lname; 
     $email = strip_tags($_POST['email']); 
     $phone = strip_tags(htmlentities($_POST['phone'])); 
     $address = strip_tags(htmlentities($_POST['address'])); 
     $city = strip_tags(htmlentities($_POST['city'])); 
     $state = strip_tags(htmlentities($_POST['state'])); 
     $zip  = strip_tags(htmlentities($_POST['zip'])); 
     $country = strip_tags(htmlentities($_POST['country'])); 
     $message = strip_tags(htmlentities($_POST['goals'])); 

     // PREPARE THE BODY OF THE MESSAGE 

     $message = '<html><body>'; 

     $message .= '<table rules="all" style="border-color: #666;" cellpadding="10">'; 
     $message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>$name</td></tr>"; 
     $message .= "<tr><td><strong>Email:</strong> </td><td>$email</td></tr>"; 
     $message .= "<tr><td><strong>Phone:</strong> </td><td>$phone</td></tr>"; 
     $message .= "<tr><td><strong>Address:</strong> </td><td>$address</td></tr>"; 
     $message .= "<tr><td>&nbsp;</td><td>$city, $state $zip $country</td></tr>"; 
     $message .= "<tr><td><strong>Goals:</strong> </td><td>$message</td></tr>"; 

     $message .= "</table>"; 
     $message .= "</body></html>"; 


     // CHANGE THE BELOW VARIABLES TO YOUR NEEDS 

     $to = '[email protected]'; 

     $subject = 'Website Change Reqest'; 

     $headers = "From: $email \r\n"; 
     $headers .= "Reply-To: $email \r\n"; 
     $headers .= "MIME-Version: 1.0\r\n"; 
     $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 

if (mail($to, $subject, $message, $headers)) { 
      echo 'Your message has been sent.'; 
     } else { 
      echo 'There was a problem sending the email.'; 
     } 

?> 
+0

'mail($ to,...)'函數在哪裏? – Azad

+0

你的'mail()'函數在哪裏發送? – cmorrissey

+0

我離開了它,但添加並仍然有相同的問題。 – BKCOHEN

回答

3

PHP mail()使用sendmail系統,大多數問題發生在未正確設置時。有時webhosters徹底禁用它。

有時,我通過使用外部庫,例如PhpMailer和帶有真實郵件帳戶的SMTP來解決此問題。

在一個側面說明 - 從來沒有做到這一點:

$fname = strip_tags(htmlentities($_POST['fname'])); 
    $lname = strip_tags(htmlentities($_POST['lname'])); 
    $name = $fname." ".$lname; 
    $email = strip_tags($_POST['email']); 
    $phone = strip_tags(htmlentities($_POST['phone'])); 
    $address = strip_tags(htmlentities($_POST['address'])); 
    $city = strip_tags(htmlentities($_POST['city'])); 
    $state = strip_tags(htmlentities($_POST['state'])); 
    $zip  = strip_tags(htmlentities($_POST['zip'])); 
    $country = strip_tags(htmlentities($_POST['country'])); 
    $message = strip_tags(htmlentities($_POST['goals'])); 

它可以通過類似輕易更換:

 extract(
     array_map(
      function($elem) { 
       return strip_tags(html_entities($elem)); 
      }, $_POST) 
    ); 
+0

如何在此處使用此提取選項來打印電子郵件? – BKCOHEN

+1

'extract'函數將關聯數組分解爲單獨的變量。所以我發佈的是你的代碼的確切副本。除了方法更短,並且如果您決定修改字段,則不需要修改。 – Eternal1

+0

真棒!你!生病的研究,更多。 – BKCOHEN

1

我已經有一個問題是這樣的。問題不在於javascript代碼,而在於php的mail()函數。

現在大部分郵件服務器都不支持未經身份驗證的電子郵件發送。爲了使用mail()函數,您從未提供用戶名或密碼來登錄郵件服務器。

我的問題是使用PHPMailer類(可在http://phpmailer.worxware.com)解決,我提供郵件服務器地址,帳戶用戶名和密碼。認爲使用附件創建HTML電子郵件非常容易,而不必擔心編寫長標題代碼。

0

你使用Denwer測試這個例子嗎?