【问题标题】:Return value from async ajax request to required method of jQuery Validation plugin从异步 ajax 请求返回值到 jQuery Validation 插件的所需方法
【发布时间】:2014-03-16 04:51:15
【问题描述】:

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

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

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

required: function(element) {
  return true_or_false;
}

所以我决定在这个函数中使用异步 ajax 请求,但我无法从异步 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 请求的值返回给他?

【问题讨论】:

  • 响应是true,我用断点检查了if response == true || response == "true" 是true 并且函数返回false,但为时已晚——required 方法已经得到true
  • “验证空白字段”是什么意思?您想要一个空白字段吗?如果它是空白的,你为什么需要服务器告诉你这个?

标签: javascript jquery ajax validation jquery-validate


【解决方案1】:

与其编写自己的异步验证方法,不如尝试使用remote 方法。

文档是here。

另外,请参阅other SO question 了解此内容。

类似这样的东西(抱歉,我的 CoffeeScript 有点生锈了)。您可能需要稍微调整一下data 选项才能使其恰到好处,但我认为这是您需要做的总体思路。

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

【讨论】:

  • remote 方法不会在空白字段上触发,但我需要在服务器端验证它们。
  • 为什么需要服务器验证字段是否为空?您能否将required 也添加到规则中,以便验证它是否存在客户端,然后任何特殊的业务规则都可以保留在服务器上以供remote 方法检查?仅向服务器发出请求以验证字段是否为空是非常低效的。
  • 嗯,更多的是理解如何获取这个值,而不是验证空字段))
  • 我不认为你可以按照你尝试的方式去做你正在做的事情。 required 函数只为您提供 element 对象。如果它支持异步验证,它也会传入一个callback 对象。如果这个问题不止于此,那么我现在完全迷失了。
猜你喜欢
  • 2011-06-01
  • 2016-10-22
  • 1970-01-01
  • 2011-09-06
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多