jQuery.validator自定义的Ajax陷入了循环

sky541514 2016-12-20 05:25:56


$().ready(function() {
var istruecode = false;
// 手机号码验证
jQuery.validator.addMethod("isMobile", function(value, element) {
var length = value.length;
var mobile = /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})$/;
return this.optional(element) || (length == 11 && mobile.test(value));
}, "请正确填写您的手机号码");
//验证码校验
jQuery.validator.addMethod("ISCODE", function(value, element) {
$.ajax({
url: "util/checkMobileValiteCode",
type: "post",
async: false,
data:{mobileValidateCode:$("#r_code").val()},
success: function(msg) {
//console.log(msg);
if( "N"== msg){
istruecode = false;
}else if("Y" == msg){
istruecode = true;
}
} , error: function (XMLHttpRequest,textStatus,errorThrown) {
console.log(XMLHttpRequest.responseText);
console.log(XMLHttpRequest.status);
console.log(XMLHttpRequest.readyState);
console.log(textStatus);
}
});

return istruecode;
}, "验证码错误");




$("#register-form").validate({

rules:{

r_tel:{
required : true,
minlength : 11,
isMobile : true,
remote : {
type : "post",
url : "checkPhone",
data : {
r_tel : function() {
return $("#r_tel").val();
}
},
}
},
r_code : {//短信校验
required : true,
digits : true,
ISCODE: true
}
},
messages: {

r_tel:{
required : "请输入手机号",
minlength : "确认手机不能小于11个字符",
isMobile : "请正确填写您的手机号码",
remote: "手机号已存在"
},
r_code : {
required : "请输入验证码",
digits : "验证码应该输入数字",
ISCODE: "验证码不正确"

}
},
submitHandler: function(form) {
$("#register-form").attr("action","${pageContext.request.contextPath}/userRegister");
$("#register-form").submit();

}

});


});


//手机验证码
function getPhoneCode() {
if ($("#r_but").html() == "获取短信验证码") {
$("#r_code").val("");
}
if ($("#r_tel").val() == "") {
//检查手机号是否为空
ShowWrong($("#r_tel"), "请输入手机号码", "error");
ismobilevalid = false;
return false;
}
check_mobilebase(); //检查手机号格式
var location = (window.location+'').split('/');
var basePath = location[0]+'//'+location[2]+'/'+location[3];
if (ismobilevalid) {
$.ajax( {
type:"post",
url : basePath+'/util/sendMobileValidateCode',
contentType : "application/x-www-form-urlencoded;charset=utf-8",
data : {"tel" : $("#r_tel").val()},
success:function(msg){
if(msg == "号码格式错误"){
ShowWrong($("#r_tel"), "号码格式错误", "error");
}else {
//ShowCorrect($("#r_tel"), "发送成功", "error");
$("#r_code").attr("disabled",false);//输入框可用
updateTimeLabel(60,"0");

}


}

});

}
return false;
}
/**修改时间lable*/
function updateTimeLabel(time, message) {
var btn = jQuery("#r_code");//setInterval javaScript方法
var hander = setInterval(function() {
if (time == 0) {
clearInterval(hander);
hander = null;
$("#r_but").attr("disabled",false);
$("#r_but").html("获取短信验证码");
} else {
$("#r_but").attr("disabled",true);
var times = "" + (time--) + "秒后点击重新发送";
$("#r_but").html(times);

}
}, 1000);
}
刚接触jQuery-validate插件,有设置获取手机验证码,和设置点击获取验证码的文字。
在使用jQuery-validate中的登录后,firefox中调用checkMobileValiteCode许多次。导致电脑很卡。
不知道是为什么原因,看jQuery-validate源码,也没看懂啥的,不会看。
...全文
166 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky541514 2017-03-31
  • 打赏
  • 举报
回复
最后找到原因了,就是最后提交的时候,不能用jQuery提交。
save4me 2016-12-21
  • 打赏
  • 举报
回复
首先,你把jQuery.validator.addMethod("ISCODE"函数里面的console.log(msg);注释去掉,看看服务器返回的msg到底是什么。 其次,你有两个地方请求'/util/sendMobileValidateCode',一个是在手机获取验证码的时候,一个是校验输入的手机验证码是否正确的时候。两个请求的参数不一样,请检查一下服务器不会每次请求都生成新的验证码,否则的话,手机号码正确的时候获取一个验证码,提交的时候,服务器生成一个新的验证码,导致输入的验证码和新生成的验证码永远不会相同,验证失败。 第三,你在jQuery.validator.addMethod("ISCODE"函数里面先定义初始化var isSuccess = false;,避免ajax失败的时候函数未给isSuccess赋值而变成null。 如果你觉得我的回答对你有帮助,请在问答之星---支持你心中的热心专家为我(save4me)投票 ,谢谢!
sky541514 2016-12-20
  • 打赏
  • 举报
回复
都请求了的,控制台上显示的都是200。如果不是别人的Action返回值不同,也犯不着这样写。用插件自带的remote就可以
daswcszxw 2016-12-20
  • 打赏
  • 举报
回复
没用过这个插件,如果有请求就打印下msg。

<a id="getVer">获取验证码</a>
$('#getVer').click(function(){
	var nowTime = new Date().getTime();
	var clickTime = $(this).attr("ctime");
	if(clickTime != 'undefined' && (nowTime - clickTime < 30000)){
		return false;
	}else{
		console.log('Ajax');
		$(this).attr("ctime",nowTime);	
	}
});
sky541514 2016-12-20
  • 打赏
  • 举报
回复
2.firefox控制台报语法错误,可是Ajax有返回值,也进入了Success,下面的error也没有抛出异常,这是什么原因。

87,909

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧