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 呼び出しが完了する前に入力を続けることができません。ここで何をすべきかよくわかりません。

たとえば、関数が 2 秒ごとに複数回実行されないようにするにはどうすればよいですか?

4

2 に答える 2

1

取り除く必要がありasync:falseますが、非同期で動作するようにコードを変更する必要もあります。同期性は、UI が「フリーズ」する原因です。

入力でキーが押されてから 2 秒後に実行されるタイムアウトを設定することもできますが、別のキーが押されると、そのタイマーが再起動します。したがって、本質的には、キーストロークが 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 に答える
1

スロットル プラグインを使用して呼び出しをスロットルできます。

jQuery スロットル プラグイン

于 2012-06-14T21:37:56.333 に答える