jQuery Validator无法使用ajax使用自定义方法提交

时间:2011-07-06 06:37:05

标签: jquery ajax validation

所以我有一个自定义验证器,根据可接受的邮政编码数据库检查输入的邮政编码。

我的自定义方法如下:

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。

我做错了吗?我怎样才能解决这个问题?

非常感谢。

2 个答案:

答案 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..
    }
});