前一段时间在做表单提交的用户体验升级,使用jquery.validate时遇到一个棘手的问题.
 具体情况是使用remote验证规则,jquery.validate 不能正常工作.于是分别用1.44版与1.51版做测试,结果仍然不能工作.
 以下是测试脚本:

     

<script>
        $(
function (){
            $(
"#form1").validate({
                rules:{
                    txt1:{
                        remote:{
                            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版提示"error undeined",1.51版则提示:"parsererror jQuery15109425226654151397_1299202557390 was not called". 使用fiddler检测浏览器端已经接收到服务端返回的布尔值.根据错误提示,问题出在类型转换上.在google中搜到一种解决方案.https://github.com/bigfix/jquery-
validation/commit/9aa53f9241224ba349f9fe1b2c801be0f431b63b#undefined
   以上方案将jquery.validate.js中的部份代码替换:

我这边是 从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);
    };
  }

 


 结果能够正常工作.
 

 

作者: 仰光 发表于 2011-03-04 10:09 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架