使用jQuery验证检查唯一用户名

使用jQuery验证检查唯一用户名,jquery,jquery-validate,Jquery,Jquery Validate,这与jquery验证相关 我试图通过添加一个我称之为“unique”的选项来改进我的站点上的jquery验证,该选项检查所选用户名是否已被其他用户使用。 为此,如果用户名是唯一的或不唯一的,我就在数据库中签入AJAX(这可以工作),但是这个.optional(元素)不工作。。。我认为这是因为在函数中“this”不再是指“unique”,但我看不到解决它的方法。。。。我花了3个小时在网上寻找答案,但找不到发生了什么 unique: function( value, element ) { $

这与jquery验证相关

我试图通过添加一个我称之为“unique”的选项来改进我的站点上的jquery验证,该选项检查所选用户名是否已被其他用户使用。 为此,如果用户名是唯一的或不唯一的,我就在数据库中签入AJAX(这可以工作),但是这个.optional(元素)不工作。。。我认为这是因为在函数中“this”不再是指“unique”,但我看不到解决它的方法。。。。我花了3个小时在网上寻找答案,但找不到发生了什么

unique: function( value, element )
{
   $.post('includes/userunique.php',{uname:value},
   function(response,status)
   {
      return this.optional( element ) || response > 0;
    });
}

方法
post
是异步的,您将无法从这样的ajax调用中获得结果。异步意味着代码执行不会等待ajax调用完成

方法
post
返回一个承诺,其中包含对
done
fail
always
的回调方法,您可以在这些方法中评估结果或对错误作出反应


有关更多信息,请查看官方文档

克劳迪奥指出,您需要使用的语法如下

unique: function(value, element) {
    $.post('includes/userunique.php', {
        uname: value
    })
    .done(function(response) {
        // Do stuff with the response
    })
    .fail(function() {
        // Handle the error
    })
    .always(function() {
        // Do something regardless of whether successful or failure
    })
}

不过,谢谢,我理解,有没有任何方法可以对它进行一些更改,并将元素的更改直接集成到函数中,比如:unique:function(value,element){free=$.post('includes/userunique.php',{uname:value},function(response,status){返回this.optional(element)| response>0;}不幸的是,这不起作用,因为我认为函数中没有定义“This”,但我确信有什么事情要做?@Iron:我现在离开,但我稍后会尝试看一看,请在问题中添加您的评论作为编辑,因为没有格式很难阅读。多谢朋友!道伊会重新发明轮子吗?IMO@Barmar,OP应该使用
remote
来检查是否使用了一个名称,这将是这个名称的重复:@Sparky没有仔细阅读,所以我没有注意到这与jquery validate有关,只是看到了异步问题。@Sparky我已经重新打开,您现在可以使用该复制关闭。@barmar-没问题,完成了。到OP:this
this中的
this
。可选(元素)
在放入
$.post()函数时更改其含义。如果坚持使用这种方法,请将ajax响应保存在一个变量中,并从
$.post()
外部执行
返回。否则,只需根据副本执行
远程
功能即可。