我试图在validator.addMethod
jquery验证中集成ajax请求。
我们说我有一个像
这样的输入字段Amount : [ text box ]
其验证规则是
$('.form').validate({
....
...
amount:{ amt_val : true }
..
});
add validator方法是
$.validator.addMethod("amt_val", function(value, element){
$.ajax({
type: 'POST',
async:false,
...
...
success:function(res){
// return true or false
}
});
});
注意:我在这里使用 async:false 的原因是,验证器在ajax请求完成之前返回false。
因此,每次我输入金额时,它都会通过ajax进行验证。如果我连续输入金额值,我想中止之前的ajax请求。
我试过this solution喜欢
var xhr = null;
$.validator.addMethod("amt_val", function(value, element){
if(xhr != null) { xhr.abort(); xhr = null; }
xhr = $.ajax({
type: 'POST',
async:false,
...
...
success:function(res){
// return true or false
}
});
});
但它仅适用于异步请求。有什么想法吗?
答案 0 :(得分:0)
首先停止使用同步请求。您非常清楚原因。 接下来,出于验证目的,您可以使用仅在异步ajax完成时调用的回调函数。
使用同步ajax请求解决您的问题将导致UI阻塞,直到请求完成。因此,从逻辑上和技术上来讲,您只能在前一个同步请求完成后再执行下一个同步请求。因此,中止先前的同步ajax请求是不可能的!
相反,只有在用户完成输入时,才可以模拟验证ajax调用。这可以通过读取在输入元素旁边放置验证按钮的输入中按下的Enter键来实现。
希望有帮助。