我正在尝试使用 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/