Jquery Validate всегда возвращает false при проверке электронной почты, даже если возвращается true - PullRequest
1 голос
/ 28 апреля 2011

Я знаю, что были посты, которые почти совпадали с тем, что я просматривал, и, к сожалению, не нашел решения.Моя проблема в том, что я написал валидатор электронной почты, используя функцию jadery .addmethod () для плагина проверки jquery.

$.validator.addMethod("uniqueEmail", function(value, element) {
    $.ajax({
        data: 'email=' + value,
        type: 'get',
        url: 'functions/emailcheck.php',
            dataType:"html",
            success: function(msg) {
                alert("M:"+msg+"   V:"+value);
                if(msg == true || msg != null || msg == "true"){
                    return true;
                    alert("TRUE!!!");
                }
                else{
                    return false;
                }
            }
        });
    });

Затем в правилах проверки ...

email: { required: true, email: true, uniqueEmail: true },

Затем, наконецдаже во время работы с этим php-файлом ....

<?php
    echo "true";
?>

Это дает мне предупреждение, что истина уже зарегистрирована, с сообщением по электронной почте .. uniqueEmail: jQuery.format("{0} has already been registered").Теперь у меня есть предупреждение отладки, установленное в вызове ajax.оно показывает, что оно возвращает true, а значение соответствует введенному.

Я надеюсь, что некоторая помощь сводит меня с ума, и я чувствую, что это будет очевидно для некоторых из вас!

PS Вот мое полное Валидация минус вышеуказанный дополнительный метод ...

$( ".form_registration_submit" ).click(function() {
        $(".qtip").remove();
        $("#form_registration").validate({
            onfocusout: function(element){
                $(".qtip").remove();
            },
            rules: {
                name: {
                    required: true,
                    minlength: 3
                },
                firstname: {
                    required: true,
                    minlength: 3
                },
                lastname: {
                    required: true,
                    minlength: 3
                },
                username: {
                    required: true,
                    minlength: 3
                },
                password: {
                    required: true,
                    minlength: 5
                },
                confirm_password: {
                    required: true,
                    minlength: 5,
                    equalTo: "#form_registration_password"
                },
                email: {
                    required: true,
                    email: true,
                    uniqueEmail: true
                },
                topic: {
                    required: "#newsletter:checked",
                    minlength: 2
                },
                agree: "required"
            },
            messages: {
                name: "Please enter your name",
                firstname: "Please enter your firstname",
                lastname: "Please enter your lastname",
                username: {
                    required: "Please enter a username",
                    minlength: "Your username must consist of at least 2 characters"
                },
                password: {
                    required: "Please provide a password",
                    minlength: "Your password must be at least 5 characters long"
                },
                confirm_password: {
                    required: "Please confirm your password",
                    minlength: "Your password must be at least 5 characters long",
                    equalTo: "Please enter the same password as above"
                },
                email: {
                    required: "Please enter a valid email address",
                    uniqueEmail: jQuery.format("{0} has already been registered")
                },
                agree: "Please accept our policy"
            },
             errorPlacement: function(error, element) {
              element.qtip(
                  {
                      show: { solo: false, ready: true, delay: 0 },
                      hide: { when:false },
                      content: eval(error),
                      style: { name: 'dark', border: { width: 1, radius: 1, color:"red" }, tip: 'bottomLeft' },
                      position: {
                          corner: { target: 'topRight', tooltip: 'bottomLeft' },
                          adjust: { x: 0 , y: 0 }
                      }
                  });
            },
            submitHandler: function(form) {
                $(".qtip").remove();
                jQuery(form).ajaxSubmit({
                    target: "#login_result"
                });
            }
        }); 
    });

Ответы [ 3 ]

3 голосов
/ 28 апреля 2011

Ваша функция проверки фактически не возвращает никакого значения, следовательно, оценивается как false.По умолчанию .ajax() запросы являются асинхронными, что означает, что функция проверки завершается до того, как появится вероятность выполнения вашего обратного вызова.

Эта проблема является дубликатом .post внутри jQuery.validator.addMethod всегдавозвращает false

1 голос
/ 28 апреля 2011

Может быть, ваш код валидатора находится внутри функции щелчка (или другого события), поэтому он вызывается много раз? Вы должны поместить его один раз или внутри $ (document) .ready (). Кроме того, вы должны отправить данные как это:

...
data: {'email': value},
...

так что он будет закодирован. Если вы этого не сделаете, письма, такие как a@a.c&om, будут действительными

0 голосов
/ 15 марта 2012

Просто добавьте параметр async: false для вашего вызова ajax, и все будет хорошо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...