2012-06-14 86 views
3
function checkuser(user) { 
     var ret = false; 
     $.ajax({ type:'POST', url:'user.php', 
      async:false, 
      data:{'user':user}, 
      success:function (data) { 
       if (data == 1) ret = true 
      } }); 

     return ret; 
    } 

我使用bvalidator来验证字段。它似乎在每次按键时触发此功能,并且用户无法在ajax通话之前继续打字。我不确定在这里做什么。AJAX验证“冻结”在jQuery?

我该如何让功能不会每两秒跑一次?

+0

在哪里/如何()'使用'checkuser功能? – Marko

+4

您正在将'async'属性设置为false,您确定这就是您想要的吗? –

+0

哎呀,误解了这个问题。我希望新标题能够更公正一些。 – 2012-06-14 21:40:21

回答

1

你需要摆脱async:false但你还需要修改代码以异步工作。同步性是导致您的用户界面“冻结”的原因。

也许你可以尝试设置一个超时,在你的输入上按下一个键2秒后运行,但如果按下另一个键,则重新启动该定时器。所以实质上它只会在没有按键两秒之后。

var validateTimeout; 

$('#target').keydown(function() { 
    clearTimeout(validateTimeout); 
    validateTimeout = setTimeout(function(){checkuser(user);},2000); 
}); 

你需要更新checkuser Ajax调用有一个更聪明的回调异步工作:

function checkuser(user) { 
    $.ajax({ type:'POST', url:'user.php', 
     async:false, 
     data:{'user':user}, 
     success:function (data) { 
      if(data == 1){ 
       //something to indicate sucess 
      }else{ 
      //something to indicate failure 
      } 
     } }); 
}