AJAX验证在jQuery中“冻结”

AJAX validation "freezes" in jQuery?

本文关键字:冻结 jQuery 验证 AJAX      更新时间:2023-09-26
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;
    }

我使用验证器来验证字段。它似乎在每次按键时都会触发此功能,并且在 ajax 调用竞争之前用户无法继续键入。我真的不确定在这里做什么。

例如,如何使函数每两秒运行不超过一次?

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

也许您可以尝试设置一个超时,该超时将在按下输入上的一个键后运行 2 秒,但如果按下另一个键,它会重新启动该计时器。所以从本质上讲,它只会在没有击键的两秒钟后。

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

您需要更新用户查核 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
            }
        } });
}

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

j查询油门插件