Я работаю над проверкой ввода CAPTCHA с использованием AJAX.Я понял, что не могу вернуть значение из обработчика успеха вызова AJAX, поэтому я создал глобальную переменную, чтобы обработчик успеха и функция проверки могли общаться друг с другом.Но это работает не самым плохим образом.Во-первых, код:
jQuery('#contact').submit(function(event) {
if (validate_form())
{
submit_form(event);
}
else
{
return false;
}
});
var valid = true;
function validate_form()
{
valid = true;
// test form stuff here
// if something goes wrong valid will be set to false
if (!valid)
{
alert("form is not valid, refreshing captcha");
// refresh form
// ....
}
else
{
alert("form is valid, checking captcha");
check_recaptcha();
}
alert("finally, form is:" + valid);
return valid;
}
function check_recaptcha()
{
alert("checking captcha now");
// take only recaptcha values from form
var recaptcha_vals = jQuery(':input[name^="recaptcha"]').serialize();
jQuery.post('recaptcha.php', recaptcha_vals, function(data) {
alert("recaptcha post has succeeded!");
if (data == '1\n' /*success!*/)
{
alert("recaptcha is correct!");
jQuery('#recaptcha_error').empty();
}
else
{
alert("recaptcha is incorrect!");
show_recaptcha();
jQuery('#recaptcha_error').html("<p class=\"error\">CAPTCHA was incorrect, please try again.</p>");
valid = false;
}
});
}
Я тестировал этот код, не вводя ничего в поле ввода CAPTCHA (очевидно, неверное значение).Согласно предупреждениям, каждая часть кода прошла должным образом, за исключением того, что valid
по-прежнему true
после выполнения check_recaptcha()
, хотя я знаю, что "неправильная" ветвь была соблюдена.Итак, вопрос № 1: Почему обработчик событий не может установить valid
в false
?
Вот где это становится странным.В приведенном выше сценарии форма не отправляется, даже если validate_form()
возвращает true
(согласно предупреждениям).Однако, когда я закомментирую все оповещения и попробую снова с теми же самыми входными данными, тогда форма ДОЛЖНА отправить.Итак, вопрос № 2: Что случилось с ЭТОМ? # 1, тем не менее, важнее.