2011-07-06 41 views
1

因此,我有一个自定义验证程序,可以根据我的可接受邮政编码数据库检查输入的邮政编码。jQuery Validator无法使用ajax自定义方法提交

我的自定义方法如下:

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。

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

非常感谢。

回答

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; 
}, '*'); 

希望这有助于同步recuest。干杯

+0

别忘了'type:'POST'' – jerluc

+0

@jerluc谢谢,你是对的 –

-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.. 
    } 
}); 
相关问题