jQuery验证插件验证自定义方法需要返回$. AJAX 调用的结果-可以在不使用async:false的情况下完成吗?

ajsxfq5m  于 2023-01-25  发布在  jQuery
关注(0)|答案(1)|浏览(128)

我使用的是jQuery validation plugin。它工作得很好,是一个令人印象深刻的工具。我得到的表单上的88个字段中有几个需要使用其他网站上的API。我已经发现我不能直接从javascript中做到这一点,因为它违反了同源策略。因此,它对我自己的网站进行$. AJAX 调用(然后通过curl调用API)。
jQuery验证插件允许您通过调用jQuery.validator.addMethod(name, method [, message ] )来定义验证方法
名称是一个字符串,用于标识为配置中指定的特定字段调用的函数。方法是一个函数定义,返回布尔值和参数,参数由字段的当前值、字段的DOM元素和要传递给方法的参数组成。
因此,在我的验证方法中,我需要进行一个$ AJAX 调用,处理结果,并向调用者返回true或false。我不需要告诉调用者传递函数来调用valid或invalid,我必须向调用者返回一个布尔值。我已经阅读了this问题和其他类似问题的答案,据我所知,它们都涉及到用$. AJAX ()调用的结果触发对另一个函数的调用(无论是使用promises还是callback)--它们都不会将结果返回给$.ajax()的调用者,除非你传递async:false to $. AJAX ().我错过了什么吗?或者我应该告诉插件的维护者,他们为自定义验证函数定义了一个糟糕的接口:-)?

ssgvzors

ssgvzors1#

不需要为此定义自定义规则。“jQuery validation” 已经为这种场景内置了remote method

示例1:使电子邮件字段成为必填项,一封电子邮件,并执行远程请求以检查给定的地址是否已被占用。

$( "#myform" ).validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: "check-email.php"
    }
  }
});

示例2:将email字段设置为必填项,一封email,并发出远程请求以检查给定地址是否已被占用。另外,http方法设置为“post”,用户名与email地址一起发送。

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

上例中的remote方法就是您要查找的,remote属性的值接受与jQuery的$.ajax()方法相同的属性。
在服务器上,可以返回"true"以指示验证通过,返回"false"以指示验证失败,或者返回一个字符串以显示自定义错误消息。

相关问题