在我的ajax代码中将数据发布到php时出错

时间:2013-04-30 16:04:40

标签: php ajax

我一直在尝试使用jQuery和Ajax验证输入字段中输入的电子邮件地址。似乎我的验证PHP中的jQuery addClass和removeClass似乎不适用于主PHP文件。

这是我的代码: -

<table cellspacing="10px" cellspacing="5px" class="sign_up_table">

    <tr>
        <td>
        <input class="ui_input2 no_space inpt1913" id="input_email" type="email" name="i_email" style="height:25px; width:300px; font-size:16px;" required />
        </td>
        <td id="input_email_error">
        <img src="img/a_loader.gif" id="a_loader_i" style="display:none; position:relative; top: 2px;" />
        </td>
</table>

我的jQuery:

    $(document).ready(function() {
        $('#input_email').on('input',function(e){
            var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
            var val_i_email = $("#input_email").val();

            var empty = false;
            $('#input_email').each(function() {
                if (val_i_email < 5 || !emailReg.test(val_i_email)) {
                    empty = true;
                }
            });

            if (empty) {
                $(this).addClass("invalid");
                $(this).removeClass("valid");

                $email_valid = false;

                    } else {
            var i_email = $("#input_email").val();
            $('#a_loader_i').show();

            $.ajax({
            type: "POST",
            url: '/script/validate_email.php',
            data: {i_email:i_email},
            cache: false,
            success: function(){
                $("#a_loader_i").hide();

                $email_valid = true;
                }
            });
        }
    });
});

PHP:

// include pdo config
include_once ('config.php');

    // store the values submitted by form in variable
    $email=$_POST['i_email'];

    // query
    foreach($pdo->query("SELECT * FROM Users WHERE email='$email'") as $row); {
        if ($email == $row['Email']) {
            echo "<script>
                    $('#input_email_error').append('This email has already been taken');
                    $('#input_email').addClass('invalid');
                    $('#input_email').removeClass('valid');
                    $('#a_loader_i').hide();
                  </script>";

        }else{
            echo "<script>
                    $('#input_email').addClass('valid');
                    $('#input_email').removeClass('invalid');
                    $('#a_loader_i').hide();
                  </script>";
        }
    }

$pdo = null;

3 个答案:

答案 0 :(得分:1)

看起来你正在调用你希望被调用的ajax调用中的HTML。让你的PHP返回一个你检查的JSON编码的真/假,然后让成功的回调执行你在php中尝试的逻辑。

在javascript中执行:

 $.ajax({
            type: "POST",
            url: '/script/validate_email.php',
            data: {'i_email':i_email},
            cache: false,
            success: function(data){
                if(data.valid) {
                    $('#input_email').addClass('valid');
                    $('#input_email').removeClass('invalid');
                    $('#a_loader_i').hide();
                } else {
                    $('#input_email_error').append('This email has already been taken');
                    $('#input_email').addClass('invalid');
                    $('#input_email').removeClass('valid');
                    $('#a_loader_i').hide();
                }
            });

在php中:

 if ($email == $row['Email']) {
      $valid = false;
 } else {
      $valid = true;
 }

 echo json_encode(array('valid' => $valid));

如果电子邮件有效,您有php返回,页面本身决定如何处理。

答案 1 :(得分:0)

没有看到你的config.php,我无法看到完整的图片,但我猜你应该在你的php文件中echo json_encode($response);

$response应包含以下内容:

如果接受电子邮件:

$response = array(
        'success' => true,
        'note' => "Accepted"
    );

或者如果电子邮件存在/无效:

$response = array(
        'success' => false,
        'note' => "This email has already been taken"
    );

然后在jquery中成功:

    success: function(response){
        if(response.success){
            $('#input_email').addClass('valid');
            $('#input_email').removeClass('invalid');

        } else {
            $('#input_email').addClass('invalid');
            $('#input_email').removeClass('valid');

        }
        $('#input_email_error').append(response.note);
        $('#a_loader_i').hide();
    }

答案 2 :(得分:-1)

PHP代码中的

$email=$_POST['i_email'];会在帖子值中查找名为i_email的项目。如果你能看到字符串,它看起来像i_email=sting@mail.com(也可能是url编码)。

在您的AJAX中,您将键定义为与您的值相同。所以

else {
        var i_email = $("#input_email").val(); //You define your variable.

        $('#a_loader_i').show();

        $.ajax({
        type: "POST",
        url: '/script/validate_email.php',
        data: {i_email:i_email},  //Outputs as 'you@mail.com:you@mail.com'
        cache: false,
        success: function(){
            $("#a_loader_i").hide();

            $email_valid = true;
            }
        });
    }

您可能希望将i_email:i_email更改为email:i_email或类似的内容,然后在PHP中更改$_POST['email']