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 调用完成之前继续输入。我不确定在这里做什么。

例如,我怎样才能使函数每两秒运行一次以上?

4

2 回答 2

1

您可以使用节流插件限制调用:

jQuery 油门插件

于 2012-06-14T21:37:56.333 回答
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
            }
        } });
}
于 2012-06-14T21:53:44.933 回答