【问题标题】:send mail (mail to php Post method) using Ajax and jQuery使用 Ajax 和 jQuery 发送邮件(邮件到 php Post 方法)
【发布时间】:2016-11-25 05:22:00
【问题描述】:

我通过执行一个 PHP 函数,我的 index.html 从我的 html 页面发送邮件:

  <form method="POST" action="sendmail.php" >
 <input type="text" name="sender_name" placeholder="Name" required="">
 <input type="text" name="sender_email" placeholder="Email" required="">
 <input type="text" name="subject" placeholder="Subject" required="">
 <textarea placeholder="Message" name="message" required=""></textarea>
  <input type="submit" name="send" value="SEND">

    </form>

我的 sendmail.php:

<?php
if($_POST['send'] == 'SEND'){

$to      = 'queries@mydomain.com';
$subject = $_POST['subject']; 
$message = $_POST['message']; 
$headers = "From: ".$_POST['sender_nam‌​e​']." <".$_POST['sender_em‌​ail‌​'].">\r\n"; $headers = "Reply-To: ".$_POST['sender_ema‌​il‌​']."\r\n"; 
$headers = "Content-type: text/html; charset=iso-8859-1\r\n";
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
}
?>

以上工作正常,但也离开当前页面

我必须使用 AjaxjQuery?到目前为止,我对他们一无所知:

////in my index.html
<button type="button">send mail</button>
<p></p>
<script type="text/javascript">



    $(document).ready(function(){
        $("button").click(function(){

            $.ajax({
                type: 'POST',
                url: 'sendmail.php',
                success: function(data) {
                    alert(data)
                    $("l").text(data);

                }
            });
   });
});
</script>

我知道上面是不正确的 & 它不工作(目前它在弹出窗口中显示 sendmail.php 的文本)我怎样才能让它工作以便我可以执行 sendmail.php ???

更新:

index.html

    <form method="POST" id="myForm" action="sendmail.php">
  <input type="text" name="sender_name" placeholder="Name" required="">
  <input type="text" name="sender_email" placeholder="Email" required="">
  <input type="text" name="subject" placeholder="Subject" required="">
  <textarea placeholder="Message" name="message" required=""></textarea>
  <input type="submit" name="send" value="SEND">
</form>



</div>
<script type="text/javascript">


  $(document).ready(function(){
        $("#myForm").on('submit', function(){
            var formData = $(this).serialize();
            $.ajax({
                type: 'POST',
                url: 'sendmail.php',
                data: formData,
                success: function(response.success) {
                    alert(response.success)
                    $("l").text(response.success);

                }
            });
   });
</script>
    `

【问题讨论】:

    标签: php jquery html ajax


    【解决方案1】:

    使用.on('submit'.serialize(),以下内容应该适合您

    HTML

    <form method="POST" id="myForm" action="sendmail.php">
      <input type="text" name="sender_name" placeholder="Name" required="">
      <input type="text" name="sender_email" placeholder="Email" required="">
      <input type="text" name="subject" placeholder="Subject" required="">
      <textarea placeholder="Message" name="message" required=""></textarea>
      <input type="submit" name="send" value="SEND">
    </form>
    

    JS

    $(document).ready(function() {
        $("#myForm").on('submit', function(event) {
            event.preventDefault(); 
            var formData = $(this).serialize();
            $.ajax({
                type: 'POST',
                url: 'sendmail.php',
                dataType: "json",
                data: formData,
                success: function(response) { 
                    alert(response.success); 
                },
                error: function(xhr, status, error){
                    console.log(xhr); 
                }
            });
        });
    });
    

    PHP

    <?php
    if(isset($_POST['message'])){
        $to      = 'queries@mydomain.com';
        $subject = $_POST['subject']; 
        $message = $_POST['message']; 
        $headers = "From: ".$_POST['sender_nam‌​e​']." <".$_POST['sender_em‌​ail‌​'].">\r\n"; $headers = "Reply-To: ".$_POST['sender_ema‌​il‌​']."\r\n"; 
        $headers = "Content-type: text/html; charset=iso-8859-1\r\n";
        'X-Mailer: PHP/' . phpversion();
        if(mail($to, $subject, $message, $headers)) echo json_encode(['success'=>true]); 
        else echo json_encode(['success'=>false]);
        exit;
     }
    ?>
    

    【讨论】:

    • 我应该这样做吗?请检查更新的问题
    • @remyboys 是的,这应该适合您使用。您是否遇到问题或遇到错误?
    • @remyboys 确保添加function(event){event.preventDefault(); 位,如上所示,没有它,它将无法工作。我第一次添加答案时忘记了它,但之后编辑了它
    • 在哪里添加? function(event){event.preventDefault();@DelightedD0D
    • @remyboys 添加它,就像上面js 部分中显示的那样,你应该很好
    【解决方案2】:

    所以像下面的代码一样为你的表单标签提供和 id。

     <form method="POST" action="sendmail.php" id="sendForm">
     <input type="text" name="sender_name" placeholder="Name" required="">
     <input type="text" name="sender_email" placeholder="Email" required="">
     <input type="text" name="subject" placeholder="Subject" required="">
     <textarea placeholder="Message" name="message" required="">  
     </textarea>
     <input type="submit" name="send" value="SEND" id="submitButton">    
     </form>
    

    然后像下面的代码一样更新你的脚本

        $(document).ready(function(){
            $("#submitButton").click(function(event){
             event.preventDefault();
            var datas = $('#sendForm').serialize();
    
                $.ajax({
                    type: 'POST',
                    url: 'sendmail.php',
                    data: datas,
    
                    success: function(data) {
                        alert(data)
                        $("l").text(data);
    
                    }
                });
       });
    });
    

    查看url 了解如何使用 ajax 提交表单数据

    【讨论】:

    • 不要忘记调用event.preventDefault();,否则html表单将通过正常流程提交,页面将在调用ajax之前刷新;)
    • 当然..谢谢你通知我
    【解决方案3】:

    您好,给您的表单一个 id 并使用 JS preventDefault()

    <form method="POST" id="myForm" action="sendmail.php">
      <input type="text" name="sender_name" placeholder="Name" required="">
      <input type="text" name="sender_email" placeholder="Email" required="">
      <input type="text" name="subject" placeholder="Subject" required="">
      <textarea placeholder="Message" name="message" required=""></textarea>
      <input type="submit" id="sendMail" name="send" value="SEND">
    </form>
    

    发送邮件.php

    <?php
        if($_POST['send'] == 'SEND'){
    
        $to      = 'queries@mydomain.com';
        $subject = $_POST['subject']; 
        $message = $_POST['message']; 
        $headers = "From: ".$_POST['sender_nam‌​e​']." <".$_POST['sender_em‌​ail‌​'].">\r\n"; $headers = "Reply-To: ".$_POST['sender_ema‌​il‌​']."\r\n"; 
        $headers = "Content-type: text/html; charset=iso-8859-1\r\n";
        'X-Mailer: PHP/' . phpversion();
        //check if the mail was sent
        if (mail($to, $subject, $message, $headers)) {
            echo json_encode(['result' => true]);
        }else {
            echo json_encode(['result' => false]);
         }
       }
    ?>
    

    jQuery

    $(document).ready(function () {
    //send button click
    $('#sendMail').on('click', function (e) {
        e.preventDefault();
        $.post('sendmail.php', $('#myForm').serialize(), function (data) {
            //show the results if the mail was sent or not
            var res = $.parseJSON(data);
            if (res.result === true) {
               $('#feedback').html('your mail was sent');
            }else {
               $('#feedback').html('your mail was not sent');
            }
        });
    });
    });
    

    【讨论】:

      【解决方案4】:
      <form id="my_form" method="POST" action="sendmail.php" >
       <input type="text" name="sender_name" placeholder="Name" required="">
       <input type="text" name="sender_email" placeholder="Email" required="">
       <input type="text" name="subject" placeholder="Subject" required="">
       <textarea placeholder="Message" name="message" required=""></textarea>
        <input id="my_button" type="button" name="send" value="SEND">
      </form>
      

      jQuery 代码

        $(document).ready(function(){
              $("#my_button").click(function(){
      
                  $.ajax({
                      type: 'POST',
                      url: 'sendmail.php',
                      data : $('#my_form').serialize(),
                      success: function(data) {
      
                      }
                  });
         });
      

      php代码

      <?php
      
      $searcharray = array();
      parse_str($_POST['data'], $searcharray);
      if($searcharray['send'] == 'SEND'){
      
      $to      = 'queries@mydomain.com';
      $subject = $searcharray['subject']; 
      $message = $searcharray['message']; 
      $headers = "From: ".$searcharray['sender_nam‌​e​']." <".$searcharray['sender_em‌​ail‌​'].">\r\n";
      $headers .= "Reply-To: ".$searcharray['sender_ema‌​il‌​']."\r\n"; 
      $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
      $headers .= 'X-Mailer: PHP/' . phpversion();
      mail($to, $subject, $message, $headers);
      }
      

      【讨论】:

        猜你喜欢
        • 2018-10-11
        • 1970-01-01
        • 2017-07-21
        • 2013-08-23
        • 1970-01-01
        • 2018-02-08
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多