Ajax检查注册电子邮件的形式


Ajax check registered email on form

我用这个脚本来检查电子邮件是否使用ajax在DB中注册。问题是:它只是检查一次,如果用户插入一个注册的电子邮件,然后插入另一个电子邮件checkemail.php中的变量不会改变。

<script type="text/javascript">
    $(document).ready(function() {
        var x_timer;    
        $("#email").keyup(function (e){
            clearTimeout(x_timer);
            var email = $(this).val();
            x_timer = setTimeout(function(){
                check_username_ajax(email);
            }, 600);
        }); 
        function check_username_ajax(email){
            $.post('checkemail.php', {'email':email}, function(data) {
                $("#user-result").html(data);
            });
        }
    });
</script>
<input type="email" name="email" id="email" placeholder="E-mail" /><span id="user-result"></span>

checkemail.php

<?php
    require'conexao.php';
    $email = mysql_real_escape_string($_POST['email']);
    $SQL = "SELECT email FROM clients WHERE email = '" . $email . "'";
    $check = @mysql_query($SQL) or die("Erro no banco de dados!");
    $result = @mysql_num_rows($check);
    if($result){
        $emailstate = "1";
        echo '<script type="text/javascript">alert("O E-mail informado já está cadastrado.");</script>
        <input type="radio" id="emailstate" name="emailstate" value="<?php echo $emailstate; ?>" style="display:none;" checked>';
    } else {
        $emailstate = "0";
        echo '<input type="radio" id="emailstate" name="emailstate" value="<?php echo $emailstate; ?>" style="display:none;" checked>';
    }
?>
有人能帮我一下吗?

你的问题显示的代码没有多大意义,即不清楚你到底想要实现什么,但这将使你走上正确的轨道。

checkemail.php

<?php
if (!empty($_POST['email'])) {
    // Lookup
    $email = $_POST['email'];
    $sql = "SELECT email, username FROM clients WHERE email = '" . mysql_real_escape_string($email) . "' LIMIT 1";
    $result = mysql_query($sql);
    // Format the response package and send back to calling .js function
    $response = new stdClass();
    if (!$result) {
        $response->error = "Could not successfully run query ($sql) from DB: " . mysql_error();
        exit;
    } else {
        $row = mysql_fetch_assoc($result);
        if ($response->exists = mysql_num_rows($result)) {
            // If account exists, get username and add to response data
            $response->username = $row['username'];
        }
    }
    echo json_encode($response);
    exit;
}
?>

客户端html/js:

<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("#email").blur(function (e) {
            var email = $(this).val();
            check_username_ajax(email);
        });
        function check_username_ajax(email) {
            $.post('checkemail.php', {'email': email}, function (data) {
                //uncomment the line below to inspect the response in js console/firebug etc
                //console.log(data);
                if (data.hasOwnProperty('error')) {
                    $("#user-result").html(data.error);
                } else {
                    if (data.exists == '1') {
                        $("#user-result").html('Account exists, username is: ' + data.username);
                    } else {
                        $("#user-result").html('Account does not exist');
                    }
                }
            }, "json");
        }
    });
</script>
<div>
    <input type="email" name="email" id="email" placeholder="E-mail" />
    <span id="user-result"></span>
</div>

你可以像这样添加其他属性到PHP响应对象:$response->username,然后访问js ajax/post响应中的变量:data.username .

正如其他评论者所说,使用任意延迟来放松'setTimeout',它并不真正适用于这里,也许您会发现onBlur更合适,或者可能包装成一个完整的形式-因为它不清楚您的预期用途是什么。

checkemail.php

<?php
    require'conexao.php';
    $sql = "SELECT email FROM clients WHERE email = '" . mysql_real_escape_string($email) . "' LIMIT 1";
    $echk=mysql_query($sql);
    $ecount=mysql_num_rows($echk);
    if($ecount!=0)
    {
        $emailstate = "1";
        echo '<script type="text/javascript">alert("O E-mail informado já está cadastrado.");</script>
        <input type="radio" id="emailstate" name="emailstate" value="<?php echo $emailstate; ?>" style="display:none;" checked>';
    } else {
        $emailstate = "0";
        echo '<input type="radio" id="emailstate" name="emailstate" value="<?php echo $emailstate; ?>" style="display:none;" checked>';
    }
?>

js

<script type="text/javascript">
            function checkMailStatus(){
            var email=$("#email").val();
            $.ajax({
                type:'post',
                    url:'checkemail.php',
                    data:{email: email},
                    success:function(msg){
                        $("#user-result").html(msg);
                    }
             });
            }
        </script>
html

<input type="email" name="email" id="email" placeholder="E-mail" onblur="checkMailStatus()"/><span id="user-result"></span>