多个jQuery验证远程单个元素

时间:2014-01-15 05:44:31

标签: 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>

我的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'
      }
   }
});

实际上我有两(2)个远程网址可以查看。我看到的大多数示例仅使用1个(一个)远程站点。那么我该如何实现呢?

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

1 个答案:

答案 0 :(得分:7)

引用OP “我想在单个元素中进行两次ajax调用验证。”

  1. 为什么?

  2. 不,你不能。

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

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

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

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

    根据文档,如果您从服务器发回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             
    

    See documentation:

      

    响应评估为JSON,有效元素必须为true,   并且可以使用任何falseundefinednull作为无效元素   默认消息; OR A STRING ,例如。 “这个名字已经被拿走了,试试吧   peter123而不是“显示为错误消息。