javascript - 使用 JQuery 的 AJAX 调用未设置变量

标签 javascript jquery ajax recaptcha

我正在尝试使用 reCAPTCHA 和 AJAX 来验证 CAPTCHA。

我有一个函数可以完成这一切,但我需要向调用函数返回 true 或 false 值以指定是否提交表单。

我的 AJAX 调用正在正确处理,但我设置标志以显示验证码无效的位置未设置。

我解释得不太好,所以这是代码:

function validateComment(isReply)
{ 
    formValid = true;
    if (isReply) { qualifier = "Reply"; } else { qualifier = "New"; }
    $("#comment" + qualifier + "Error").hide();
    $.post("/scripts/checkcaptcha.php", 
    { 
        recaptcha_challenge_field : $('#recaptcha_challenge_field').val(), 
        recaptcha_response_field : $('#recaptcha_response_field').val() 
    },
        function(data) 
        {
            if (data == "invalid")
            {
                $("#comment" + qualifier + "Error").html("<p>Incorrect CAPTCHA entered</p>");
                $("#comment" + qualifier + "Error").slideDown();
                formValid = false;
                Recaptcha.reload();
            } 
        }
    );
    alert(formValid);
    return false;
}

我设置的 formValid = false 由于某种原因不起作用,它没有被设置,因此上面的代码 formValid 始终为 true,这是不正确的。

我猜这与事物的处理方式有关。

关于为什么以及如何解决这个问题有什么想法吗?

谢谢。

最佳答案

我很确定这是因为 validateComment 函数首先执行。您的ajax响应处理函数是一个回调函数,因此直到加载响应之后才会执行它(此时validateComment已经执行并返回了一个值)。解决这个问题的方法是设置一个全局 bool 变量(例如 is_loaded),然后进入循环并一直等待,直到 is_loaded 为 true,或者您可以使用 setInvterval 每 100 毫秒或其他时间检查一次。

编辑:或者您可以尝试将响应加载到变量中并以这种方式检查错误。

var html = $.ajax({
  url: "some.php",
  async: false
}).responseText;

关于javascript - 使用 JQuery 的 AJAX 调用未设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6889971/

相关文章:

javascript - django ajax 禁止发布 403

javascript - 在 reduce 中使用 -Infinity 的原因

javascript - Jquery attr 方法在 'onMouseEnter' 上不起作用

javascript - JavaScript 中数组存储在内存中的什么位置?

javascript - 无法让 jQuery 单击处理程序在 ajax 加载的元素上触发

javascript - 多个 .live() 绑定(bind)到元素

python - 从本地 HTML 文件,使用 Python/AJAX 关闭计算机

php - AJAX 将西里尔字母转换为某种编码

javascript - stringByEvaluatingJavaScript 对象没有 ID

javascript - 无法连接到 Firebase(JS)