Benötigen Sie eine Verzögerung in einer jQuery-Funktion
Frage
Ich brauche eine Verzögerung von einer Sekunde in dieser jQuery-Funktion zu setzen, so dass, wenn das Captcha korrekt ausgefüllt wird, eine ausreichende Verzögerung (eine Sekunde, glaube ich) für die #captchaStatus
vor dem nächsten Schritt des Verfahrens zu zeigen ( das ist ein hTML) geschrieben werden.
Muss ziemlich einfach sein, obwohl ich jQuery lerne .... Ideen? Danke.
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;
}
}
Lösung
Sie sollten sein, einen Rückruf verwenden. Besuche dieses jQuery FAQ auf dieser.
Der Code funktioniert nicht aufgrund der Art der asynchronen Programmierung gewünscht. Der zur Verfügung gestellte Erfolg Handler wird nicht sofort aufgerufen, sondern zu einem bestimmten Zeitpunkt in der Zukunft, wenn die Antwort vom Server empfangen wird. Wenn wir also den ‚Status‘ Variable unmittelbar nach dem $ Schnipsel Aufruf verwenden, sein Wert ist noch nicht definiert.
getUrlStatus('getStatus.php', function(status) {
alert(status);
});
function getUrlStatus(url, callback) {
$.ajax({
url: url,
complete: function(xhr) {
callback(xhr.status);
}
});
}
Andere Tipps
Sie könnten fälschen die Verzögerung durch eine gutartige Eigenschaft wie die Opazität von 1 bis 1 über 1 Sekunde Animieren und auf die Fertigstellung Rückruf senden Sie Ihre Form ...
$("#captchaStatus")
.html("You got it right - I'm sending the email now....")
.animate({opacity: 1.0}, 1000, "linear", function() {
submitMyForm();
});
Das Geheimnis ist nicht-jQuery JS Funktion setTimeout. Dies wird Ihre Bedienung 1 Sekunde ausführen später:
setTimeout(function() {
$("#captchaStatus").html("You got it right - I'm sending the email now....");
}, 1000);