2

ユーザーがキャプチャを入力するのをリッスンし、キーアップごとに ajax リクエストを送信して、正しいコードが入力されたかどうかを確認する次の Jquery コードがあります。

$('#joinCaptchaTextBox').keyup(function() {
    $.get('scripts/ajax/script.php', {
        'join_captcha': '1',
        'captcha': $('#joinCaptchaTextBox').val()},         
        function(data) {
            var obj = JSON.parse(data);
            if(obj.ajaxResponse.status) {
                $('#joinCaptchaNotAcceptable').hide();
                $('#joinCaptchaAcceptable').show();
            }else{
                $('#joinCaptchaAcceptable').hide();
                $('#joinCaptchaNotAcceptable').show();
            }
    });
});

反対側の PHP スクリプトは、セッションをチェックして応答します。

if($siteCaptcha == $_SESSION['secretword']) {
  $this->captchaCompare = TRUE;
}else{
  $this->captchaCompare = FALSE;
}

これは 95% の確率で問題なく動作しますが、入力されたキャプチャが正しくても、間違っていると報告されることがあります。これは、タイプされたときに多くのリクエストがサーバーに送信され、注文または戻ってくるリクエストが送信された注文ではないためである可能性があると思います。

これを行うより良い方法はありますか?最後に送信されたリクエストが最後に受信されるようにする方法はありますか? 私がここに欠けているものはありますか?もっと情報を提供できます。

ありがとうございました

4

1 に答える 1

3

ユーザーがすばやく入力したときにすべてのキーアップでリクエストを送信しないように、タイムアウトを追加します。

$('#joinCaptchaTextBox').on('keyup', function() {
    clearTimeout( $(this).data('timer')  );
    $(this).data('timer', 
        setTimeout(function() {
            var data = {
                    join_captcha: '1',
                    captcha : $('#joinCaptchaTextBox').val()
            };

            $.ajax({
                url : 'scripts/ajax/script.php',
                data: data,
                dataType: 'json'
            }).done(function(result) {
                $('#joinCaptchaNotAcceptable').toggle(!result.ajaxResponse.status);
                $('#joinCaptchaAcceptable').toggle(result.ajaxResponse.status);
            });
        },500)
    );
});
于 2013-08-04T22:57:38.390 に答える