0

我需要在这个 jQuery 函数中延迟一秒,以便在正确填写验证码时,有足够的延迟(我认为是一秒)#captchaStatus在流程的下一步(这是一个 html正在发布)。

一定相当容易,虽然我正在学习 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

您应该使用回调。看看这个 jQuery FAQ 项目。

由于异步编程的性质,代码无法按预期工作。提供的成功处理程序不会立即调用,而是在将来某个时间从服务器接收到响应时调用。所以当我们在 $.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 回答