多个jQuery验证远程单个元素

dau*_*san 1 jquery jquery-validate

我想在单个元素中进行2次ajax调用验证.这是我到目前为止出来的.

我的HTML:

<form id="xForm" method="post" action="/someurl">
    <input id="oUrl" name="oUrl" type="text" />
    <button type="submit">Register</button>
</form>
Run Code Online (Sandbox Code Playgroud)

我的javascript:

$('#xForm').validate({
   rules:{
       oUrl:{
           required:true,
           minlength:4,
           maxlength:20,
           remoteA:'/register/checkValidUrl',
           remoteB:'/register/checkUrlAvailable'
      }
   },
   messages:{
      oUrl:{
          remoteA:'Url not valid',
          remoteB:'Url already been taken'
      }
   }
});
Run Code Online (Sandbox Code Playgroud)

其实我有两(2)个远程网址可以查看.我看到的大多数示例仅使用1个(一个)远程站点.那我该怎么做呢?

我这样做的原因是因为我无法找到一种方法来制作服务器站点返回错误消息的自定义验证器,并且在客户端使用它.

Spa*_*rky 7

引用OP: "我想在一个元素中进行两次ajax调用验证."

  1. 为什么?

  2. 不,你不能.

它看起来像这样,它会非常破碎......

$('#form').validate({
    rules:{
        myField: {  // <-- rules are assigned by field 'name'
            remote: '/register/checkValidUrl',
            remote: '/register/checkUrlAvailable'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,当您第一次将字段值发送到服务器端脚本时,只需检查它是否通过了所有必要的数据验证,并且不需要再次发送相同的内容.换句话说,没有实际或逻辑上的理由将两次相同的值发送到服务器.

$('#form').validate({
    rules:{
        myField: {  // <-- rules are assigned by field 'name'
            remote: '/register/checkUrl'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

根据文档,如果您true从服务器发回,该字段将通过验证.如果您发回一个字符串,该字段将失败验证,该字符串将成为您的错误消息.通过这种方式,您可以将值发送到服务器一次,并根据需要以多种不同方式对其进行验证.

你的服务器端代码,(翻译成你需要的任何语言)......

if invalid URL             
   echo JSON "url is invalid"         // fails validation      
else if unavailable URL    
   echo JSON "url is not available"   // fails validation
else if URL is purple    
   echo JSON "url must not be purple" // fails validation
else                      
   echo JSON TRUE                     // passes validation             
Run Code Online (Sandbox Code Playgroud)

见文档:

响应被评估为JSON并且必须是true用于有效元素,并且可以是任何false,undefinednull为无效元素,使用默认的消息; 或者一个字符串,例如."该名称已被采用,请尝试使用peter123"以显示为错误消息.