سؤال

ولست بحاجة لوضع تأخير ثانية واحدة في هذه الوظيفة مسج بحيث عندما يتم تعبئة كلمة التحقق بشكل صحيح، هناك تأخير كافية (ثانية واحدة، على ما أظن) ل#captchaStatus لاظهار قبل الخطوة التالية من عملية ( والتي هي أتش تي أم أل نشرها).

ويجب أن يكون من السهل إلى حد ما، على الرغم من أنني أنا مسج تعلم .... الأفكار؟ شكرا.

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;
    }
}
هل كانت مفيدة؟

المحلول

ويجب أن تكون باستخدام الاستدعاء. تحقق من هذه التعليمات البند مسج في هذا الشأن.

<اقتباس فقرة>   

ولا يعمل الكود كما المرجوة نظرا لطبيعة البرمجة غير المتزامنة. لا يتم استدعاء معالج نجاح قدمت على الفور، وإنما في وقت ما في المستقبل عندما يتم تلقي رد من الخادم. لذلك عندما نستخدم مركز 'المتغير مباشرة بعد استدعاء $ .ajax، قيمتها لا تزال غير محددة.

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


function getUrlStatus(url, callback) {
  $.ajax({
     url: url,
     complete: function(xhr) {
         callback(xhr.status);
     }
  });
}

نصائح أخرى

هل يمكن أن همية لتأخر تحرك بعض الممتلكات حميدة مثل عتامة 1-1 على 1 ثانية وعلى رد استكمال تقديم النموذج الخاص بك ...

$("#captchaStatus")
    .html("You got it right - I'm sending the email now....")
    .animate({opacity: 1.0}, 1000, "linear", function() {
        submitMyForm();
    });

والسر هو غير مسج JS ظيفة setTimeout. هذا وسوف تؤدي بك ثاني عملية 1 في وقت لاحق:

setTimeout(function() {
  $("#captchaStatus").html("You got it right - I'm sending the email now....");
}, 1000);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top