我有一个自定义验证器方法,它会根据我接受的邮政编码数据库检查输入的邮政编码。我想让这个请求异步。以下是目前的情况:
jQuery.validator.addMethod("validZip", function(value, element){
var isValid = false;
$.ajax({
url: '/xpress/wp-admin/admin-ajax.php',
data: {action:"test_checkZip", zip:value},
type:"POST",
async: false,
success: function(result){
if (result == 0){
isValid = false;
} else {
isValid = true;
}
}
});
return isValid;
}, '*');
此请求要求它是同步的,因为它正在更新由包装函数返回的变量。如果我要异步执行此操作,请求将以非阻塞方式完成。该函数将执行,执行请求,但是不等待响应更新它将返回的布尔值。它将在ajax完成之前返回默认的false值并将其更新为true。
我需要显式通知验证器事件已经更改,需要重新验证控件。如何实现通知验证器的想法?
我需要做这样的事情:
jQuery.validator.addMethod("validZip", function(value, element){
$.ajax({
url: '/xpress/wp-admin/admin-ajax.php',
data: {action:"test_checkZip", zip:value},
type:"POST",
async: true,
success: function(result){
if (result == 0){
notifyZipControl(false)
} else {
notifyZipControl(true)
}
}
});
}, '*');
function notifyZipControl(isValid){
if (isValid){
// update the validator so the control becomes VALID
} else {
// update the validator so the control becomes INVALID
}
}
这个想法是否可以实现?
答案 0 :(得分:2)
使用remote
rule:
$("form").validate({
rules: {
zip: {
remote: {
url: "/xpress/wp-admin/admin-ajax.php",
data: {
/* supply data besides the field value here: */
action: "test_checkZip"
}
}
}
}
});
在幕后,验证只是使用$.ajax
电话,因此您应该能够提供所需的灵活性。
这是一个(差)示例,只是检查邮政编码是否长5个字符(并没有真正以有意义的方式访问服务器,但希望它会给你一个很好的起点):http://jsfiddle.net/HYLS4/