jQuery验证器中添加的方法中的Ajax方法

时间:2010-05-18 15:11:47

标签: javascript jquery ajax methods validation

我有点坚持这个非常简单(我敢肯定)的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.");

当用户在注册表单中键入他的电子邮件地址时,调用此函数,并且一切似乎都完美无缺,除了我的有效变量未更新,而当我使用警报框时,它已正确完成!< / p>

看起来它在AJAX完成之前返回值,任何想法?

干杯,
尼古拉斯。

2 个答案:

答案 0 :(得分:0)

remote rule option允许你这样做:

$("#myform").validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: {
        url: "check-email.php",
        type: "post",
        data: {
          username: function() {
            return $("#username").val();
          }
        }
      }
    }
  }
});

答案 1 :(得分:0)

您的代码失败,因为ajax异步工作。在调用成功函数之前达到return语句。要使其同步,请将async: false添加到您的ajax调用中,如下所示:

$.ajaxA({
  async: false,
  type: "POST",
  url: param,
  data: "email=" + email,
  success: function(msg) {
                if (msg != '' && msg)
                {
                    valid = 0;
                }
                else
                {
                    valid = 1;
                }
        }
});