Нужна задержка в функции jQuery - PullRequest
0 голосов
/ 28 октября 2009

Мне нужно установить задержку в одну секунду в этой функции 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;
    }
}

Ответы [ 3 ]

4 голосов
/ 28 октября 2009

Вы должны использовать обратный вызов. 1003

Код не работает должным образом из-за характера асинхронного программирования. Предоставленный обработчик успеха вызывается не сразу, а скорее в какое-то время в будущем, когда ответ получен с сервера. Поэтому, когда мы используем переменную 'status' сразу после вызова $ .ajax, ее значение все еще не определено.

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


function getUrlStatus(url, callback) {
  $.ajax({
     url: url,
     complete: function(xhr) {
         callback(xhr.status);
     }
  });
}
1 голос
/ 28 октября 2009

Вы можете сфальсифицировать задержку, анимируя какое-нибудь мягкое свойство, например, непрозрачность от 1 до 1 в течение 1 секунды, и по завершении обратного вызова отправьте форму ...

$("#captchaStatus")
    .html("You got it right - I'm sending the email now....")
    .animate({opacity: 1.0}, 1000, "linear", function() {
        submitMyForm();
    });
0 голосов
/ 28 октября 2009

Секрет не в jQuery-функции JS setTimeout. Это выполнит вашу операцию через 1 секунду:

setTimeout(function() {
  $("#captchaStatus").html("You got it right - I'm sending the email now....");
}, 1000);
...