【问题标题】:Set up Ajax to send form results to php file for email设置 Ajax 以将表单结果发送到 php 文件以发送电子邮件
【发布时间】:2013-01-03 12:24:44
【问题描述】:

我目前在this site 上有一个联系表格,我希望将其从 php 结果迁移到 ajax 结果。我使用了带有此代码的 mail.php 文件:

<?php
 $firstname = $_POST['firstName'];
 $lastname = $_POST['lastName']; 
 $email = $_POST['email'];
 $tel1 = $_POST['tel1'];
 $tel2 = $_POST['tel2'];
 $tel3 = $_POST['tel3'];
 $reason = $_POST['reason'];
 $message = $_POST['text'];
 $formcontent="From: $firstname $lastname \n Email address: $email \n Telephone Number: $tel1 $tel2 $tel3 \n Reason: $reason \n Message: $message";
 $recipient = "ilanbiala@ilanshomekitchen.x10.mx";
 $subject = "Contact Form";
 $mailheader = "From: $email \r\n";
 mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
 echo "<script>alert('Thank you!');</script>";
 ?>

此 php 文件发送了一封包含联系表单结果的电子邮件。但是,它还重新加载了页面并在空白页面上显示了一个警告框,这不是我想要的。我正在寻找使用 jquery ajax 函数来制作它,以便 ajax 将信息发送到我的 php 文件到邮件,除非我可以直接从 ajax 邮寄联系表格以获得结果。

联系表单是通过这个ajax函数提交的:

function submitForm(form) {
    var form = $("form").submit(function() {
        var formData = new FormData(form);
        console.log("formData");
        var XHR;
        if (window.XHMLHttpRequest){XHR = new XHMLHttpRequest();}
        else {XHR = new ActiveXObject("Microsoft.XMLHTTP");}
        XHR.open("POST","mail.php",true);
        console.log("XHR opened.");
        XHR.onreadystatechange = function(e) {
            if (this.readyState == 4 && this.status == 200) {
                XHR.send(formData);
                console.log("Sent formData.");
            }
        }
    });
}

【问题讨论】:

  • 您能告诉我们调用 PHP 文件的 HTML 表单和/或 JavaScript 代码吗?

标签: php jquery html ajax xmlhttprequest


【解决方案1】:

您可以使用jQuery's .ajax

$.ajax({
        type: "POST",
        url: "mail.php",
        data: { firstname: nameVar, email: emailVar............ }
    }).done(function( msg ) {
        alert( msg );
    });

【讨论】:

  • put 如何获取 mail.php 文件以正确解释结果并将电子邮件发送到某个地址?
  • 您指定的 php(即 mail.php)代码将适用于此。就像使用
    。您可以 echo("Thank you");... 然后它会发布警报。
  • 哦,好吧,我发现的表格中的数据可以使用var formData = new FormData(form);这一行来检索,这可以代替data: { }吗?
  • hey sudip,这段代码无效,你可以访问 ilanshomekitchen.x10.mx/contact.html 并在 chrome 开发者工具中查看控制台。括号之一是关闭的,如何在 html 文件中设置表单操作?
  • 您不需要设置表单操作。创建一个javascript函数并在函数内添加上述代码。在 html 表单的提交按钮上添加属性 onclick ="functionName()"
【解决方案2】:

在您链接表单的页面上,您的表单的 ID 为 form,因此我将在示例代码中使用它:

JavaScript 代码

$(document).ready(function(){
    $('#form').submit(function(e){
        e.preventDefault();

        $.post($(this).attr('action'), $(this).serialize(), function(data) {
            // do whatever with the data returned
            console.log(data);
        });
    }, 'text');
});

这是一个非常简单的示例,您需要在 HTML 中的 &lt;form&gt; 标记中添加 action 属性(在您的情况下为 mail.php)。

PHP 代码

<?php

 $firstname = $_POST['firstName'];
 $lastname = $_POST['lastName']; 
 $email = $_POST['email'];
 $tel1 = $_POST['tel1'];
 $tel2 = $_POST['tel2'];
 $tel3 = $_POST['tel3'];
 $reason = $_POST['reason'];
 $message = $_POST['text'];
 $formcontent="From: $firstname $lastname \n Email address: $email \n Telephone Number: $tel1 $tel2 $tel3 \n Reason: $reason \n Message: $message";
 $recipient = "ilanbiala@ilanshomekitchen.x10.mx";
 $subject = "Contact Form";
 $mailheader = "From: $email \r\n";

 if(mail($recipient, $subject, $formcontent, $mailheader)) {
     echo 'Thank you!';
 } else {
     echo 'Error!';
 }

?>

例如,您可以尝试使用 JSON 进行更奇特的事情,但对于这个示例,我将其保持得很简单。

【讨论】:

  • 这不是我想要的,我想像 Sudip 一样使用 ajax 函数。
  • $.post 函数只是$.ajax 函数的简写符号,与$.get 相同。
【解决方案3】:

正如已经提到的,您可以使用简单的 AJAX 调用来实现您想要的。但是,而不是

echo "<script>alert('Thank you!');</script>";

我建议这样:

header('Content-type: application/json');
if(mail($recipient, $subject, $formcontent, $mailheader)) {
    echo "{'msg':'email has been sent'}";
} else {
    echo "{'error':'there was an error sending email'}";
}

然后在 AJAX 调用中,您可以获取返回的 JSON 对象并在您的页面上显示成功/错误消息。

【讨论】:

  • 我个人建议发送一个非 HTTP 2xx 标头来指示错误,以及一个文本字符串,当然还有带有成功消息的 HTTP 200 表示成功。 JSON 在每个 AJAX 操作中都不是绝对必要的,但在我的回答中我保持简单。
猜你喜欢
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 2015-08-10
相关资源
最近更新 更多