【发布时间】:2011-07-06 16:41:59
【问题描述】:
我有一个自定义验证器方法,它将根据我接受的邮政编码数据库检查输入的邮政编码。我想让这个请求异步。以下是它目前的样子:
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
}
}
这个想法可以实现吗?
【问题讨论】:
标签: javascript jquery ajax validation jquery-validate