0

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;
4

3 に答える 3

1

呼び出されることを期待している ajax 呼び出しで HTML を返しているようです。それを行う代わりに、php で確認した JSON エンコードされた true/false を返してから、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 が返され、ページ自体がそれをどうするかを決定します。

于 2013-04-30T16:33:01.637 に答える
0

あなたのconfig.phpを見ないと、全体像を見ることはできませんが、echo json_encode($response);phpファイルに入れるべきだと思います

$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();
    }
于 2013-04-30T16:36:32.787 に答える