Метод Ajax в добавленном методе в валидаторе jQuery - PullRequest
0 голосов
/ 18 мая 2010

Я застрял с этой довольно простой (я уверен) проблемой jQuery / Javascript. Вот код:

jQuery.validator.addMethod("emailExists", function(value, element, param) {
var email = value || '';
var valid = 0;
$.ajax({
  type: "POST",
  url: param,
  data: "email=" + email,
  success: function(msg) {
                if (msg != '' && msg)
                {
                    valid = 0;
                }
                else
                {
                    valid = 1;
                }
        }
});
return valid;
}, "* Email address already registered, please login.");

Эта функция вызывается, когда пользователь вводит свой адрес электронной почты в регистрационной форме, и кажется, что все работает отлично, за исключением того, что моя действительная возвращенная переменная не обновляется, тогда как когда я использую окно предупреждения, это делается правильно!

Похоже, он возвращает значение до того, как AJAX будет выполнен, любая идея?

Ура,
Николя.

Ответы [ 2 ]

0 голосов
/ 18 мая 2010

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

$.ajaxA({
  async: false,
  type: "POST",
  url: param,
  data: "email=" + email,
  success: function(msg) {
                if (msg != '' && msg)
                {
                    valid = 0;
                }
                else
                {
                    valid = 1;
                }
        }
});
0 голосов
/ 18 мая 2010

Существует опция удаленного правила , которая позволяет вам сделать что-то вроде этого:

$("#myform").validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: {
        url: "check-email.php",
        type: "post",
        data: {
          username: function() {
            return $("#username").val();
          }
        }
      }
    }
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...