jquery.validate 1.7版本(remote方法)bug修复方法
前一段时间在做表单提交的用户体验升级,使用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>
$(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);
};
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);
};
}
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);
};
}
结果能够正常工作.
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架