【问题标题】:js not passing form data for php mailjs没有为php邮件传递表单数据
【发布时间】:2016-01-27 19:09:00
【问题描述】:

我是一名尝试创建 HTML 网页的初学者。我正在使用免费的在线模板并尝试创建联系页面。联系人调用 php 脚本来发送捕获字段的电子邮件。当我将电子邮件作为没有 javascript 或 ajax 的纯 php 发送时,我可以让它工作。但是,当我尝试将 javascript 与 ajax 代码一起使用时,Web 表单的内容不会被传递。这里提出了两个几乎相同的问题,但我发现 javascript 对于我自己作为初学者来说很复杂。 js 中的细微差别导致尝试解决数小时但没有成功。

js deleting submitted form data

PHP form post data not being received due to jQuery

HTML代码是

<div class="col-md-4 col-sm-12">
<div class="contact-form bottom">
    <h2>Send a message</h2>
    <form id="main-contact-form" name="contact-form" method="post" action="sendemail.php">
        <div class="form-group">
            <input type="text" name="name" class="form-control" required="required" placeholder="Name">
        </div>
        <div class="form-group">
            <input type="email" name="email" class="form-control" required="required" placeholder="Email Id">
        </div>
        <div class="form-group">
            <textarea name="message" id="message" required class="form-control" rows="8" placeholder="Your text here"></textarea>
        </div>                        
        <div class="form-group">
            <input type="submit" name="submit" class="btn btn-submit" value="Submit">
        </div>
    </form>
</div>

PHP 脚本名为 sendemail.php

<?php
header('Content-type: application/json');
$status = array(
'type'=>'success',
'message'=>'Thank you for contact us. As early as possible  we will contact you '
);


$name = @trim(stripslashes($_POST['name'])); 
$email = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 

$email_from = $email;
$email_to = 'email@email.com';

$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;
$success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');

echo json_encode($status);

die;

javascript如下

// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        url: $.post(this).attr('action'),  
        beforeSend: function(){
            form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">Thank you for contacting us. We will reply as soon as possible.</p>').delay(3000).fadeOut();
    });
});

有两个问题,第一个是使用javascript代码时表单数据不传递。第二个是它显示消息两次并发送两封电子邮件。我认为第二个问题与再次调用该函数的php脚本有关。

非常感谢您的帮助和指导,我是一个只尝试小挑战的初学者。

【问题讨论】:

    标签: javascript php jquery ajax


    【解决方案1】:

    邮件表单似乎被故意禁用。我花了一段时间来修复它。 下面的代码将使它工作。我希望这会有所帮助。

        // Contact form
    var form = $('#main-contact-form');
    form.submit(function(event){
        event.preventDefault();
        var form_status = $('<div class="form_status"></div>');
        $.ajax({
            type     : "POST",
            cache    : false,
            url      : $(this).attr('action'),
            data     : $(this).serialize(),
            beforeSend: function(){
                form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
            }
        }).done(function(data){
            form_status.html('<p class="text-success">Thank you for contacting us. We will reply as soon as possible.</p>').delay(3000).fadeOut();
        });
    });
    

    【讨论】:

    • 非常感谢迈克,非常感谢您的时间和帮助 :) 我已经实施了您的调整,但是自从我的原始帖子以来我的路由器已经更新,端口 25 已被阻止,所以我不能目前无法对此进行全面测试。我将把它标记为已接受,并希望能够在接下来的几周内确认。再次感谢,我希望你有一个美好的一天;)
    猜你喜欢
    • 2022-01-19
    • 2011-05-24
    • 2019-07-28
    • 2016-05-17
    • 1970-01-01
    • 2011-08-11
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多