2016-07-27 99 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中。 –