2011-06-22 107 views
1

我使用jQuery的验证插件一些验证挣扎。jQuery的验证addMethod,无论什么显示错误消息

基本上我检查,如果用户名已经存在,所以我用addMethod创建自己的方法。我通过AJAX发送请求到控制器(控制器和MVC模式一样),该控制器查询数据库并生成一个响应,告诉用户名是否存在。下面的代码:

$.validator.addMethod("username_available", function(value, element) { 
    $.ajax({ 
     url: MyPostURL, 
     type: "POST", 
     dataType: "html", 
     data: ({username: jQuery.trim($("#username").val()), 
       }), 
     success: function(data) { 
      if (data == "True") 
       return true; // Available 
      else 
       return false; // Already exists, not available 
     } 
    }) 
}, "Username not available."); 

没有,如果是外地可用,错误消息“ 用户名不可用”事情一直显示。

MyPostURL响应是O.K.我做了一些调试,放置了一些警报(),结果很有意义。我确信控制器回显而不是返回。

据我所知,在方法的逻辑似乎O.K.,所以我必须失去了一些东西。

任何人都可以在此提供一些线索?

T.I.A.

回答

3

$.ajax调用是异步这样你的验证返回之前的AJAX调用完成;您的成功处理程序内return声明不会从你的验证器返回一个值,它只是从成功处理程序返回值,没有人关心你的成功处理程序返回的内容。您的验证器回调函数根本不返回任何值,验证器引擎将缺少值解释为“false”。

你可以使$.ajax同步:

$.validator.addMethod("username_available", function(value, element) { 
    var is_valid = false; 
    $.ajax({ 
     // as before... 
     async: false, 
     success: function(data) { 
      is_valid = data == 'True'; 
     } 
    }); 
    return is_valid; 
}, "Username not available."); 

但直到$.ajax调用完成,将锁住浏览器。虽然这可能是简单的“用户名可用”验证。

+0

工作就像一个魅力!我的验证器根本没有任何回报!坦克为您的答案和整个解释,欣赏它。 – romeroqj

相关问题