AJAX验证在jQuery中“冻结”了吗?

时间:2012-06-14 21:36:20

标签: javascript jquery

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之前继续键入。我不确定该怎么做。

我怎么能让这个函数每两秒运行一次?例如?

2 个答案:

答案 0 :(得分:1)

您可以使用限制插件来限制呼叫:

jQuery Throttle Plugin

答案 1 :(得分:1)

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

也许您可以尝试设置在输入上按下某个键后运行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
            }
        } });
}