jquery-validate remote 远程校验返回非boolean类型处理

7 篇文章 0 订阅

文档地址:http://www.runoob.com/jquery/jquery-plugin-validate.html

关于处理远程校验处理返回非boolean值的处理

在表单校验的时候经常用到验证码,验证码返回的结果有好多种,如:过期,错误等不同类型的错误,这个时候用boolean就不能处理该问题,这个时候就需要查看源代码,修改方法获取支持。

通过查看源代码加断点调试就会发现,remote会调用下面方法进行验证

jquery-validate.js

remote: function( value, element, param ) {
   if ( this.optional( element ) ) {
      return "dependency-mismatch";
   }

   var previous = this.previousValue( element ),
      validator, data;

   if (!this.settings.messages[ element.name ] ) {
      this.settings.messages[ element.name ] = {};
   }
   previous.originalMessage = this.settings.messages[ element.name ].remote;
   this.settings.messages[ element.name ].remote = previous.message;

   param = typeof param === "string" && { url: param } || param;

   if ( previous.old === value ) {
      return previous.valid;
   }

   previous.old = value;
   validator = this;
   this.startRequest( element );
   data = {};
   data[ element.name ] = value;
   $.ajax( $.extend( true, {
      mode: "abort",
      port: "validate" + element.name,
      dataType: "json",
      data: data,
      context: validator.currentForm,
      success: function( response ) {
         var valid = response === true || response === "true",
            errors, message, submitted;

         validator.settings.messages[ element.name ].remote = previous.originalMessage;
         if ( valid ) {
            submitted = validator.formSubmitted;
            validator.prepareElement( element );
            validator.formSubmitted = submitted;
            validator.successList.push( element );
            delete validator.invalid[ element.name ];
            validator.showErrors();
         } else {
            errors = {};
            message = response || validator.defaultMessage( element, "remote" );
            errors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;
            validator.invalid[ element.name ] = true;
            validator.showErrors( errors );
         }
         previous.valid = valid;
         validator.stopRequest( element, valid );
      }
   }, param ) );
   return "pending";
}

这个时候通过各种调试进行必要的修改,通过看代码会发现ajax success方法 有 

var valid = response === true || response === "true", 

1.获取结果是否是boolean的,如果只是涉及返回的结果在后台有做处理只做显示的话,只需要修改下面代码,因为我返回的信息是 {"ret":1,"msg":"验证码已过期!","err":2000},所以我会直接用 response.msg 这个

message = response || validator.defaultMessage( element, "remote" );

改为

message = response.msg || validator.defaultMessage( element, "remote" );

2.我这边因为用到手机号获取验证码,还得校验手机号是否是正确的,这个时候在验证验证码之前需要对手机号进行验证,正确了才会去验证验证码所以还得需要修改代码

if (!this.element("#phone1")) {
                return true;
            } else {
                var checkElement = this.validationTargetFor( this.clean( element ) );
                this.prepareElement( checkElement );
                this.currentElements = $( checkElement );
            }
这句是验证手机号是否是正确的,因为验证手机号后校验元素会变成phone1,这个可以通过调试看this.validElements()这个方法就清楚,所以else是将校验的元素改为验证码元素,不然后面验证通过验证样式可能有问题
/**
     * 修改验证码远程验证返回非false处理
     */
    jQuery.extend( jQuery.validator.methods, {

        // http://jqueryvalidation.org/remote-method/
        remote: function( value, element, param ) {

            if (!this.element("#phone1")) {
                return true;
            } else {
                var checkElement = this.validationTargetFor( this.clean( element ) );
                this.prepareElement( checkElement );
                this.currentElements = $( checkElement );
            }

            if ( this.optional( element ) ) {
                return "dependency-mismatch";
            }

            var previous = this.previousValue( element ),
                validator, data;

            if (!this.settings.messages[ element.name ] ) {
                this.settings.messages[ element.name ] = {};
            }
            previous.originalMessage = this.settings.messages[ element.name ].remote;
            this.settings.messages[ element.name ].remote = previous.message;

            param = typeof param === "string" && { url: param } || param;

            if ( previous.old === value ) {
                return previous.valid;
            }

            previous.old = value;
            validator = this;
            this.startRequest( element );
            data = {};
            data[ element.name ] = value;
            $.ajax( $.extend( true, {
                mode: "abort",
                port: "validate" + element.name,
                dataType: "json",
                data: data,
                context: validator.currentForm,
                success: function( response ) {
                    var valid = response === true || response === "true",
                        errors, message, submitted;

                    validator.settings.messages[ element.name ].remote = previous.originalMessage;
                    if ( valid ) {
                        submitted = validator.formSubmitted;
                        validator.prepareElement( element );
                        validator.formSubmitted = submitted;
                        validator.successList.push( element );
                        delete validator.invalid[ element.name ];
                        validator.showErrors();
                    } else {
                        errors = {};
                        message = response.msg || validator.defaultMessage( element, "remote" );
                        errors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;
                        validator.invalid[ element.name ] = true;
                        validator.showErrors( errors );
                    }
                    previous.valid = valid;
                    validator.stopRequest( element, valid );
                }
            }, param ) );
            return "pending";
        }
    });







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值