2016-07-27 94 views
0

所以我試圖從jQuery函數發送一個對象到PHP腳本通過郵件()發送它們,但我的電子郵件總是空的,所以我想我可能沒有真正理解我應該怎麼做,以使其正常工作JQuery對象通過ajax發送郵件()

這裏是jQuery函數

  function sendForm() { 

      $surname = $('#surname').val(); 
      $name = $('#name').val(); 
      $email = $('#email').val(); 
      $comment = $('#q4').val(); 

      $to = '[email protected]' 
      $subject = 'Contact Form' 

      $datastring = {$surname,$name,$email,$comment,$to,$subject} 

      $.ajax({ 
       url: 'send.php', 
       type: 'post', 
       data: $datastring, 
       success: function() { 
        alert('email sent!'); 
       } 
      }); 
      return false; 
     } 

這裏的send.php

<?php 
$to  = $_POST[$to]; 
$subject = $_POST[$subject]; 
$message = $_POST[$comment]; 
$headers = 'From: [email protected]' . "\r\n" . 
    'Reply-To: [email protected]' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

mail($to, $subject, $message, $headers); 
?> 

我失去了什麼?謝謝您的幫助!

編輯:我檢查了$ datastring,它有我想要的形式的所有值。保存爲對象

+0

請檢查您正在發送$到變量的$ to,$ subject,$消息的值? –

+0

開發時,對值進行一些簡單的調試很有用。例如,在php腳本中添加'var_dump($ _ POST)',這將有助於查看您實際發送的內容。 (並且在您的ajax成功函數中,您可以使用'console.log'來顯示返回值,或使用瀏覽器的網絡檢查工具) –

回答

2

你必須給你的數據對象名稱的屬性,否則你將得到錯誤:

$datastring = { 
    surname : $surname, 
    name : $name, 
    email : $email, 
    comment : $comment, 
    to  : '[email protected]', 
    subject : 'Contact Form' 
}; 

在PHP端你得到這個名字再次值:

$surname = $_POST["surname"]; 
$name = $_POST["name"]; 
$email = $_POST["email"]; 
$comment = $_POST["comment"]; 
$to  = $_POST["to"]; 
$subject = $_POST["subject"]; 
+0

謝謝。有效!而且我今天也學到了一些新東西! – Evolis

+0

不客氣,@Evolis! – eisbehr

1

創建對象,使每個值undefined,因爲你沒有真正的鍵和值的方法,你需要做的是這樣的,而不是

function sendForm() { 
    $datastring = { 
     'surname' : $('#surname').val(), 
     'name' : $('#name').val(), 
     'email' : $('#email').val(), 
     'comment' : $('#q4').val(), 
     'to'  : '[email protected]', 
     'subject' : 'Contact Form' 
    } 

    $.ajax({ 
     url  : 'send.php', 
     type : 'post', 
     data : $datastring, 
     success : function() { 
      alert('email sent!'); 
     } 
    }); 
    return false; 
} 

要獲取值PHP,你會使用字符串作爲鍵

$_POST["subject"]; 
1

嘗試改變

$datastring = {$surname,$name,$email,$comment,$to,$subject} 

$datastring = {'username':$surname,'name':$name,'email':$email,'contact':$comment,'to':$to,'subject':$subject} 

然後改變

$to  = $_POST[$to]; 

$to  = $_POST['to']; 

和其餘的php代碼類似。

+0

永遠不要相信用戶的輸入!因此,請過濾您的$ _POST變量 – theColaKid

+0

公平的評論,但不清楚應該在這裏應用哪些過濾器。這個想法似乎是允許任意電子郵件到任意地址。如果'to'地址應該是硬編碼的,則將其硬編碼到php而不是JavaScript中。 –