所以我有一个自定义验证器,根据可接受的邮政编码数据库检查输入的邮政编码。
我的自定义方法如下:
jQuery.validator.addMethod("validZip", function(value, element){
var _id = $(element).attr("id");
$.post(
'/xpress/wp-admin/admin-ajax.php',
{action:"test_checkZip", zip:value},
function(response){
if (result == 0){
return false;
} else {
return true;
}
}
);
}, '*');
我认为问题在于,由于ajax是非阻塞的,因此请求的延迟不会及时返回验证器的真/假结果,以便识别它。
每当结果为true时,它都无法隐藏错误消息,并且表单无法提交。
我已经能够通过显式隐藏错误元素来隐藏返回真实代码块中的错误消息。错误消息确实隐藏,但是,表单仍然返回false,因为自定义方法无法返回true。
我做错了吗?我怎样才能解决这个问题?
非常感谢。
答案 0 :(得分:1)
您可以使用$.ajax
jQuery.validator.addMethod("validZip", function(value, element){
var _id = $(element).attr("id");
var return_val = null;
$.ajax({
url: '/xpress/wp-admin/admin-ajax.php',
type: 'post',
data: {action:"test_checkZip", zip:value},
async: false, //This does the trick
success: function(response){
if (result == 0){
return_val = false;
} else {
return_val = true;
}
}
});
return return_val;
}, '*');
希望这会有所帮助。干杯
答案 1 :(得分:-1)
如果您使用$.ajax()
,则可以指定要同步进行POST而不是异步。
$.ajax({
url: '/xpress/wp-admin/admin-ajax.php',
type: 'POST',
data: {action:"test_checkZip", zip:value},
async: false,
success: function(response){
// Process response..
}
});