繁体   English   中英

AJAX联系人表单重新加载页面但不发送电子邮件

[英]AJAX Contact Form Reloads Page but Doesn't Send Email

嗨,就像标题一样,我的代码似乎在点击发送按钮时重新加载了页面,但从未真正发送过电子邮件。 我已经尝试并阅读了所有可能的内容,没有任何东西可以使其正常工作。 衷心感谢您的帮助。

<!--[if lte IE 8]>
<script src="js/html5shiv.js"></script><![endif]-->

<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="js/jquery.min.js"></script>
<script src="js/jquery.dropotron.js"></script>
<script src="js/skel.min.js"></script>
<script src="js/skel-panels.min.js"></script>
<script src="js/init.js"></script>
<script src="js/contact.js"></script>
<noscript>
    <link rel="stylesheet" href="css/skel-noscript.css" />
    <link rel="stylesheet" href="css/style.css" />
    <link rel="stylesheet" href="css/style-noscript.css" />
</noscript>


          <!-- Contact Form-->
          <div class="content style4 featured">
       <div class="container small">
       <form id="contact" form method="post">

        <div class="row half">
         <div class="6u"><input type="text" class="text" name="name" id ="name" placeholder="Name" /></div>
           <div class="6u"><input type="text" class="text" placeholder="Email" name="email" id="email"/></div>
      </div>

<div class="row half">
    <div class="12u"><textarea name="text" placeholder="Message" id="message"></textarea></div>
</div>

<div class="row">
    <div class="12u">
        <ul class="actions">
            <li><input type="submit" class="button" value="Send Message" /></li>
            <li><input type="reset" class="button alt" value="Clear Form" /></li>
   <p class="success" style="display:none">Your message has been sent successfully.</p>
            <p class="error" style="display:none">E-mail must be valid and message must   be longer than 100 characters.</p>
        </ul>
    </div>

</div>

</form>

PHP:

<?php
    // Email Submit
    // Note: filter_var() requires PHP >= 5.2.0
    if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['message']) &&      filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
        // detect & prevent header injections
        $test = "/(content-type|bcc:|cc:|to:)/i";
        foreach ( $_POST as $key => $val ) {
            if (preg_match( $test, $val ))
            exit;
        }

        //send email
        mail( "test@gmail.com", "Contact Form: ".$_POST['name'], $_POST['text'], "From:" .      $_POST['email'] );
    }
?>

JS:

$('#contact').submit(function(e) {
e.preventDefault();
var name = $("#name").val();
var email = $("#email").val();
var message = $("#message").val();
//var dataString = 'name=' + name + '&email=' + email + '&message=' + message;

$.ajax({
    type : "POST",
    url : "mail.php",
    data : {name:name,email:email,message:message},
    cache : false,
    success : function() {              
        $("#contact").fadeOut(300);
        $("#notice").fadeIn(400);
    }
});
return false;

});

感谢您的时间。

假设您的电子邮件功能在AJAX部分中运行良好,则需要使用event.preventDefault()

在mail.php中也注意到了

if ( isset($_POST['email']) 
&& isset($_POST['name']) && 
**isset($_POST['text'])** && 
filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
}

这将使isset($_POST['text'])失败,因为我认为没有post元素应该被设为isset($_POST['message'])

另外,您的表单元素缺少ID,请添加为

<!-- Contact Form-->
<div class="content style4 featured">
<div class="container small">
    <form id="contact" form method="post">

    <div class="row half">
        <div class="6u"><input type="text" class="text" name="name" id ="name" placeholder="Name" /></div>
        <div class="6u"><input type="text" class="text" placeholder="Email" name="email" id="email"/></div>
    </div>

    <div class="row half">
        <div class="12u"><textarea name="text" placeholder="Message" id="message"></textarea></div>
    </div>

    <div class="row">
        <div class="12u">
            <ul class="actions">
                <li><input type="submit" class="button" value="Send Message" /></li>
                <li><input type="reset" class="button alt" value="Clear Form" /></li>
<p class="success" style="display:none">Your message has been sent successfully.</p>
                <p class="error" style="display:none">E-mail must be valid and message must be longer than 100 characters.</p>
            </ul>
        </div>

    </div>

    </form>
</div>
</div>


<script>
    $('#contact').submit(function(e) {
        e.preventDefault();
        var name = $("#name").val();
        var email = $("#email").val();
        var message = $("#message").val();
        //var dataString = 'name=' + name + '&email=' + email + '&message=' + message;

        $.ajax({
            type : "POST",
            url : "mail.php",
            data : {name:name,email:email,message:message},
            cache : false,
            success : function() {              
                $("#contact").fadeOut(300);
                $("#notice").fadeIn(400);
            }
        });
        return false;
    });

    </script>

我刚刚测试过,它对我有用。

你能修改你的功能吗,我认为它根本没有被调用。

$('#contact').on('submit', function(e) {
    e.preventDefault();
    var name = $("#name").val();
    var email = $("#email").val();
    var message = $("#message").val();
    //var dataString = 'name=' + name + '&email=' + email + '&message=' + message;

    $.ajax({
        type : "POST",
        url : "mail.php",
        data : {name:name,email:email,message:message},
        cache : false,
        success : function() {              
            $("#contact").fadeOut(300);
            $("#notice").fadeIn(400);
        }
    });
    return false;
});

您的mail()函数实际上是否可以单独工作? 就像您可以使用该功能发送一些邮件吗? 另外,PHP isset函数将采用如下混合参数:

PHP:

if(isset( $_POST['email'], $_POST['name'], $_POST['text'], filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    $rules = "/(content-type|bcc:|cc:|to:)/i";
    foreach( $_POST as $key => value ) {
        if(preg_match($rules, $value)) 
          exit;
    } //end of foreach
} //end of if

您的提交按钮正在执行表单发布,您需要停止该按钮的默认行为,并在单击提交按钮时调用执行ajax的方法。

http://api.jquery.com/event.preventdefault/

在JS中,您通过id访问值,但是您只是给id做输入标签(即名称,电子邮件,消息)给id的事情

<div class="6u"><input type="text" class="text" name="name" id="name" placeholder="Name" /></div>
<div class="6u"><input type="text" class="text" placeholder="Email" id="email" name="email" /></div>
<div 

class =“ 12u”>

给你的dataString为

var dataString = {name:name,email:email,message:message};

对于邮件中的更多设置标题,即

$headers = "MIME-Version: 1.0" . "\r\n";

$ headers。=“” Content-type:text / html; charset = iso-8859-1“。 “ \\ r \\ n”; $ headers。='来自:'。 “ \\ r \\ n”;

mail( "test@gmail.com", "Contact Form: ".$_POST['name'], $_POST['text'], "From:" .$_POST['email'] ,$headers);

如果您将其写在body标签即将关闭的位置之前而不是用head编写,则更好。 以上代码将在您每次点击锚标记时执行。 所以要这样具体 <body> <!-- just before body tags closes--><script> $('a.buttonClassName').click(function(e){e.preventDefault(); $("<div>default"+e.type+ "prevented</div>").appendTo("#log") })</script></body>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM