【问题标题】:after submitting a form to email i get 2 email instead 1 [duplicate]将表格提交到电子邮件后,我收到 2 封电子邮件而不是 1 [重复]
【发布时间】:2016-12-19 07:56:22
【问题描述】:

提交表单到电子邮件后,我收到 2 封电子邮件,而不是 1 我该如何解决?我只需要一封信来电子邮件

js:

app.controller('threeCtrl',function($scope){
    $("#subBusinessOne").click(function() {
    var url = "businessFormOne.php"; 
    $.ajax({
               type: "POST",
               url: url,
               data: $("form#businessFormOne").serialize(), 
               success: function(data)
               {
                   var name = $("input[name=name]").val("");
                   var rel= $("input[name=phone]").val("");
               }
             });
    return false; // avoid to execute the actual submit of the form.
        });
    });

php:

<?php 
$ToEmail = 'myemail.com'; 
$EmailSubject = 'Охрана бизнес-обьектов'; 
$mailheader = "From: ".$_POST["email"]."\r\n";
$MESSAGE_BODY = "Имя: ".$_POST["name"].""; 
$MESSAGE_BODY .= "Телефон: ".$_POST["phone"].""; 
mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader) or die ("Failure"); 
?>

【问题讨论】:

标签: javascript php forms email


【解决方案1】:

我猜#subBusinessOne 是一个表单提交按钮。您正在发送 AJAX 请求,然后作为普通 HTTP 请求再次提交表单。

您应该检查表单是否已提交,而不是检测按钮单击事件,然后阻止默认操作并发送 AJAX 请求。您的 JS 代码将如下所示:

app.controller('threeCtrl',function($scope){
    $("#businessFormOne").submit(function(e) {

    e.preventDefault(); // this is to avoid the actual submit

    var url = "businessFormOne.php"; 
    $.ajax({
               type: "POST",
               url: url,
               data: $("form#businessFormOne").serialize(), 
               success: function(data)
               {
                   var name = $("input[name=name]").val("");
                   var rel= $("input[name=phone]").val("");
               }
             });
        });
    });

【讨论】:

    【解决方案2】:
    app.controller('threeCtrl',function($scope){
        $("#subBusinessOne").submit(function(e) {
        e.preventDefault();
        var url = "businessFormOne.php"; 
        $.ajax({
                   type: "POST",
                   url: url,
                   data: $("form#businessFormOne").serialize(), 
                   success: function(data)
                   {
                       var name = $("input[name=name]").val("");
                       var rel= $("input[name=phone]").val("");
                   }
                 });
            });
        });
    

    【讨论】:

      【解决方案3】:

      使用.preventDefault()

       app.controller('threeCtrl',function($scope){
              $("#subBusinessOne").click(function(e) {
              e.preventDefault();
              var url = "businessFormOne.php"; 
              $.ajax({
                         type: "POST",
                         url: url,
                         data: $("form#businessFormOne").serialize(), 
                         success: function(data)
                         {
                             var name = $("input[name=name]").val("");
                             var rel= $("input[name=phone]").val("");
                         }
                       });
              return false; // avoid to execute the actual submit of the form.
                  });
              });
      

      【讨论】:

        【解决方案4】:

        我猜您正在尝试发出跨 AJAX 请求,这就是您收到 2 封电子邮件而不是 1 的原因。
        因为第一个请求使用方法 OPTIONS(检查是否可用于发送来自其他域的请求),第二个请求使用方法发布

        【讨论】:

        • 我该如何解决?它总是运行良好,但我一开始使用 angularRouting,我认为问题是因为我不明白 angular 如何与表单一起工作
        猜你喜欢
        • 1970-01-01
        • 2019-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-26
        • 1970-01-01
        • 2019-07-04
        相关资源
        最近更新 更多