【问题标题】:PHP form validation with AJAX使用 AJAX 进行 PHP 表单验证
【发布时间】:2013-11-14 15:11:17
【问题描述】:

我正在尝试使用我的电子邮件表单,但出了点问题。 我在接收电子邮件时没有问题,但是使用 JSON 的 ajax 脚本过程(验证成功)无法正常工作,我不知道为什么。

我的 HTML:

 <form id="feedback" method="post" action="">

        <div class="enter-data"> 
          <label for="name"><span>Nome:</span></label>
          <input name="name" id="name" type="text" class="formbox">
         </div>

       <div class="enter-data">                 
          <label for="email"><span>E-mail:</span> </label>
          <input name="email" id="email" type="text" class="formbox">
         </div>

         <div class="enter-data">                
          <label for="telefone"><span>Telefone:</span></label>
          <input name="telefone" id="telefone" type="text" class="formbox">
         </div>

         <div class="enter-commnet">

           <label for="comments"></label>
           <textarea name="comments" id="comments"></textarea>

            </div>
             <div class="button_comment-bx">
    <button class="button_comment last"  name="send" id="send"  type="submit">Enviar</button>
               <button class="button_comment"  name="reset" id="reset" type="reset">Limpar</button>
            </div>
        </form>

我的 jquery **

(已编辑)

**:

$(document).ready(function(){
    $("#feedback").submit(function(){

        $(".error").remove();

        var check = true;
        var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;

        var name = $("#name").val();
        var email = $("#email").val();
        var telefone = $("#telefone").val();

        // Validate Name
        if (name == '') {
            check = false;
            $('#name').after('<div class="error">* Preencha o seu nome!</div>');
        }
        else if (name.length < 3) {
            check = false;
            $('#name').after('<div class="error">* Nome demasiado curto!!</div>');
        }

        // Validate E-mail
        if (email == '') {
            check = false;
            $('#email').after('<div class="error">* Preencha o seu email!</div>');
        }
        else if (email.length < 5) {
            check = false;
            $('#email').after('<div class="error">* Email demasiado curto!</div>');
        }
        else if(!emailPattern.test(email)){
            check = false;
            $('#email').after('<div class="error">* E-mail não é válido!</div>');
        }

        // Validate Telefone
        if (telefone == '') {
            check = false;
            $('#telefone').after('<div class="error">* Preencha o seu telefone!</div>');
        }
        else if (telefone.length < 5) {
            check = false;
            $('#telefone').after('<div class="error">* Telefone não é válido!</div>');
        }


        // If validation is successful
$.ajax({
    type: "POST",
    url: "contact3.php",
    data: $("#feedback").serialize(),
    dataType: "json",
    success: function(response){
        $("#comments").after('<div class="success">Email enviado com sucesso!</div>');
        $('#name').val('');
        $('#email').val('');
        $('#telefone').val('');
        $('#comments').val('');
    } 
});  

    });
});

我用于发送邮件的 PHP 脚本 **

(已编辑)

**

<?php


$to ='myemail@email.com';
// Contact subject
$subject ="Contacto Site"; 

$header="from: $name <$email>";

$nome = $_POST['name'];
$email = $_POST['email'];
$telefone = $_POST['telefone'];
$mensagem = $_POST['comments'];


// Corpo da mensagem
$body = "Nome: ".$nome;
$body.= "\n";
$body.= "Email: ".$email;
$body.= "\n";
$body.= "Telefone: ".$telefone;
$body.= "\n";
    $body.= "\n";
    $body.= nl2br($mensagem);



    // Enter your email address

    mail($to,$subject,$body,$header);

echo json_encode(array('mailSuccess' => 1));

请帮帮我!

【问题讨论】:

  • 怎么了?你有错误,意外行为吗?请解释更多;)
  • 不应该PHP在邮件发送后返回一个成功消息并让jQuery在成功函数中检查该消息吗?
  • 你没有回显包含mailSuccess信息的json数组,ajax应该如何知道ajax调用是否成功
  • “不起作用”什么也没告诉我们? JS代码有问题? AJAX 调用不起作用? PHP中的问题?电子邮件不起作用?
  • aarryy 刚刚说了我想说的话。在我的表单中,我根据电子邮件是否成功发送 TRUE 或 FALSE 来回显

标签: php jquery ajaxform


【解决方案1】:

您缺少脚本的返回值。您必须回显 json_encoded 字符串,jquery 将签入 if (!response.mailSuccess)

<?php
$to ='myemail@email.com'; // Contact subject $subject ="Contacto Site"; 

$header="from: $name <$email>";

$nome = $_POST['name']; $email = $_POST['email']; $telefone = $_POST['telefone']; $mensagem = $_POST['comments'];


// Corpo da mensagem $body = "Nome: ".$nome; $body.= "\n"; $body.= "Email: ".$email; $body.= "\n"; $body.= "Telefone: ".$telefone; $body.= "\n"; $body.= "\n"; $body.= nl2br($mensagem);



// Enter your email address

mail($to,$subject,$body,$header);

echo json_encode(array('mailSuccess' => 1));
?>

已编辑:

$.ajax({
    type: "POST",
    url: "contact3.php",
    data: $("#feedback").serialize(),
    dataType: "json",
    success: function(response){
        $("#comments").after('<div class="success">Email enviado com sucesso!</div>');
        $('#name').val('');
        $('#email').val('');
        $('#telefone').val('');
        $('#comments').val('');
    } 
});

【讨论】:

  • 感谢您的帮助,但问题仍然存在,我认为这是 echo json_encoded 字符串的问题,如果(!response.mailSuccess)jquery 将检查该字符串。我怎么说我从表单接收电子邮件没有任何问题,但脚本不会触发 json 验证的最后部分
  • 再次感谢您的努力;),但是现在当我提交页面刷新并变为空白时...我的问题已根据您的建议进行了编辑。谢谢
  • 我会再试一次。请稍等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2013-01-11
相关资源
最近更新 更多