• jquery.validate 1.7版本(remote方法)bug修复方法(一)


           前一段时间使用jquery.validate时遇到一个棘手的问题. 在使用remote验证规则jquery.validate 不能正常工作. 以下是测试脚本:

    <script>
            $(
    function (){
                $(
    "#form1").validate({
                    rules:{
                        txt1:{
                            remote:{
                                url:"http:"
    //www.cnblogs.com/a_bu/admin/%22Handler2.ashx
                                ,type:"post"
                                ,data:{
    "key":"ss"}
                                ,error:
    function (a,s,d){
                                    alert(s 
    + " " + d);
                                }
                            }
                        }
                    }
                    ,messages:{
                        txt1:{
                            remote:
    "位空"
                        }
                    }
                    
                    
                })
            })
        
    </script>


            猜测可能是兼容问题,于是分别用jquery 1.44版与 jquery 1.51版做测试,其结果基本一致,分别提示:"error undeined"与"parsererror jQuery15109425226654151397_1299202557390 was not called".

            使用fiddler检测,服务端响应结果正常.因此排除了服务端因素。所以问题可能出现在jquery.validate插件本身上。之后在google中搜到一种解决方案.https://github.com/bigfix/jquery-validation/commit/9aa53f9241224ba349f9fe1b2c801be0f431b63b#undefined ,使用该替代方案后remote验证工作正常.


       从1087行截止1100行源码:

    //源文件 1087 行左右
    var ajax = $.ajax;
        
    var pendingRequests = {};
        $.ajax 
    = function(settings) {
            
    // create settings for compatibility with ajaxSetup
            settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
            
    var port = settings.port;
            
    if (settings.mode == "abort") {
                
    if ( pendingRequests[port] ) {
                    pendingRequests[port].abort();
                }
                
    return (pendingRequests[port] = ajax.apply(this, arguments));
            }
            
    return ajax.apply(this, arguments);
        };
     //1100行


     替换为:

     var pendingRequests = {};
      
    if ($.ajaxPrefilter) {
        $.ajaxPrefilter(
    function (settings, original, jqXHR) {
          
    var port = settings.port;
          
    if (settings.mode == "abort") {
            
    if ( pendingRequests[port] ) {
              pendingRequests[port].abort();
            }
            pendingRequests[port] 
    = jqXHR;
          }
        });
      } 
    else {
        
    var ajax = $.ajax;
        $.ajax 
    = function(settings) {
          
    // create settings for compatibility with ajaxSetup
          settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
          
    var port = settings.port;
          
    if (settings.mode == "abort") {
            
    if ( pendingRequests[port] ) {
              pendingRequests[port].abort();
            }
            
    return (pendingRequests[port] = ajax.apply(this, arguments));
          }
          
    return ajax.apply(this, arguments);
        };
      }

    remote验证测试例子:

    https://files.cnblogs.com/a_bu/validate.test.zip

     另一个修复方法:http://www.cnblogs.com/a_bu/archive/2011/03/06/1972202.html

  • 相关阅读:
    怪异恼人的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream问题的解决
    Spring3的quartz定时任务
    HTML模板
    SpringMVC 下载XLS文档的设置
    若想在当前路径下去运行非当前路径下的.class文件(即java可执行文件),该如何操作?
    霍金去世 享年76岁
    Github全面学习笔记
    Github上如何在Fork到的开源项目中提交Pull requests?
    Github中如何Fork开源项目?
    Java永久代去哪儿了
  • 原文地址:https://www.cnblogs.com/a_bu/p/1970586.html
Copyright © 2020-2023  润新知