0

#captchaStatusこのjQuery関数に1秒の遅延を設定して、キャプチャが正しく入力されたときに、プロセスの次のステップ(html)の前に表示するのに十分な遅延(1秒だと思います)があるようにする必要があります。投稿中)。

私はjQueryを学んでいますが、かなり簡単なはずです。ありがとう。

function validateCaptcha()
{
    challengeField = $("input#recaptcha_challenge_field").val();
    responseField = $("input#recaptcha_response_field").val();
    //alert(challengeField);
    //alert(responseField);
    //return false;
    var html = $.ajax({
    type: "POST",
    url: "/wp-content/themes/default/ajax.recaptcha.php",
    data: "recaptcha_challenge_field=" + challengeField + "&recaptcha_response_field=" + responseField,
    async: false
    }).responseText;

    if(html == "success")
    {
        $("#captchaStatus").html("You got it right - I'm sending the email now....");
        return true;
    }
    else
    {
        $("#captchaStatus").html("Your captcha is incorrect - please try again...");
        Recaptcha.reload();
        return false;
    }
}
4

3 に答える 3

4

コールバックを使用する必要があります。これに関するこのjQueryFAQアイテムをチェックしてください。

非同期プログラミングの性質上、コードは期待どおりに機能しません。提供された成功ハンドラーはすぐには呼び出されませんが、サーバーから応答を受信した将来のある時点で呼び出されます。したがって、$。ajax呼び出しの直後に「status」変数を使用すると、その値はまだ定義されていません。

 getUrlStatus('getStatus.php', function(status) {
    alert(status);
 });


function getUrlStatus(url, callback) {
  $.ajax({
     url: url,
     complete: function(xhr) {
         callback(xhr.status);
     }
  });
}
于 2009-10-28T00:30:33.043 に答える
1

不透明度などの良性のプロパティを1秒で1から1にアニメーション化し、完了コールバックでフォームを送信することで、遅延を偽造することができます...

$("#captchaStatus")
    .html("You got it right - I'm sending the email now....")
    .animate({opacity: 1.0}, 1000, "linear", function() {
        submitMyForm();
    });
于 2009-10-28T00:44:31.590 に答える
0

その秘密は、jQuery以外のJS関数setTimeoutです。これにより、1秒後に操作が実行されます。

setTimeout(function() {
  $("#captchaStatus").html("You got it right - I'm sending the email now....");
}, 1000);
于 2009-10-28T05:10:31.990 に答える