从async ajax请求返回值到jQuery Validation插件所需的方法

时间:2014-02-17 02:41:10

标签: javascript jquery ajax validation jquery-validate

我正在使用jQuery Validation plugin(JVP)通过ajax执行服务器端验证。一切都很好,除了一件事:JVP无法执行空白字段的远程验证。

我不介意将其默认规则required: true用于具有简单状态验证的属性。但有时我的模型中有复杂的逻辑,我想将它保留在服务器端。

所以问题:我无法通过他的内置远程ajax方法强制JVP验证空白字段。但我可以在他的required方法中使用函数(结果应该为true或false):

required: function(element) {
  return true_or_false;
}

所以我决定在这个函数中使用async ajax请求,但我无法从async ajax调用返回值。我尝试使用回调,但无法使其工作,我坚持这个问题。这是我的代码(CoffeeScript):

validate_url = '/emails/validate'

required_validate = (e, callback) ->
  data = {}
  data[e.name] = $(e).val()
  $.ajax(
    url: validate_url
    type: 'post'
    dataType: 'json'
    data: data
    success: (response) ->
      callback(response)
  )

$('#my_form').validate(
  rules:
    'email[email]':
      required: (element) ->
        required_validate(element, (response) ->
          if response == true || response == "true"
            false
          else
            true
        )
)

我检查了所有数据,进入服务器及其响应 - 没关系。 JVP的required方法不等待响应并且始终获得true的问题。如何从success ajax请求中返回值?

1 个答案:

答案 0 :(得分:0)

不要编写自己的异步验证方法,而是尝试使用remote方法。

文档为here

另外,请参阅此other SO question

这些方面的东西(对不起,我的CoffeeScript有点生锈)。您可能需要稍微调整data选项以使其正确,但我认为这是您需要做的一般概念。

$('#my_form').validate(
  rules:
    'email[email]':
    remote: 
      url: validate_url,
      type: "post",
      data:
          email: () ->
              $(".email_container").val()
)