Intereting Posts
Имея проблему с WP_Query с post_content и category__and Отсутствует аргумент 3 для wp_register_sidebar_widget () get_posts всегда возвращает одинаковое количество сообщений = 5 wp_ajax_nopriv_xxx не работает на одном сайте, работает на всех остальных. -1 для зарегистрированных пользователей Сохранение настраиваемых полей профиля Как определить составные клавиши с помощью dbDelta () вызывающая функция во внешнем js-файле Макет компоновщика сайта SiteOrigin потерян после миграции моего веб-сайта или перехода на классический редактор Избранные изображения не могут быть установлены Загрузка темы, основанной на обнаружении браузера next_posts_link не работает при запросе определенной категории Удалите все пользовательские сообщения, затем загрузите новый CSV-событий Связать страницу с конкретным шаблоном одной записи? Почтовый тип Загрузить каталог – {post_type} _upload_dir фильтр Предотвратите «nofollow» от вставки в сообщения BBPress

Проверка Ajax для reCaptcha

Задний план

У меня есть форма регистрации, которая проверяется с помощью AJAX с использованием механизма проверки jQuery . Форма была создана с использованием Theme My Login и содержит reCaptcha, который я реализовал с помощью WP-reCAPTCHA .

Как и остальные поля, мне нужно было проверить reCaptcha с помощью AJAX , то есть без обновления всей страницы. До сих пор мне удалось заставить его работать, когда Captcha не подтвердил. Но когда это подтвердилось , т.е. вход был верным, страница обновилась, но с сообщением об ошибке, в котором говорится , что ответ «RECAPTCHA был неправильным» . Таким образом, форма не была сохранена.

Я попытался использовать console.log() чтобы проверить вывод, а результат – «valid». Поэтому я не могу сказать, где я ошибся.

В настоящее время я тестирую это локально с помощью XAMPP .

Код, который я использовал

Javascript:

 (function($){ // Validate Captcha $.fn.validateCaptcha = function() { challengeField = $('input#recaptcha_challenge_field').val(); responseField = $('input#recaptcha_response_field').val(); $.ajax({ type: 'POST', url: the_ajax_script.ajaxurl, data: 'action=validate_captcha&recaptcha_challenge_field=' + challengeField + '&recaptcha_response_field=' + responseField, async: false, success:function(result) { //console.log( result ); if(result != 'Valid') { $('#captchaError').html('<p class="error">The security code you entered did not match. Please try again.</p>'); $captchaFlag = 'Invalid'; Recaptcha.reload(); } else { $('#memberInformation span').css({'color':'green'}); $('#memberInformation span').html(html.message).show(3000); $('#captchaError').html('<p>Success!</p>'); $captchaFlag = 'Valid'; dataString = form.serializeArray(); getSearchMembers(dataString); } } }).responseText; } $('#registerform').submit(function() { var form = $(this); if (form.validationEngine('validate')) { $('#memberInformation span').html(''); form.validateCaptcha(); } else { $('#memberInformation span').css('color','#ff0000').html('Please fill out required fields').show(3000); } return false; }); })(jQuery); 

PHP:

 function validate_Captha() { $privatekey = "xxxxxxxxxx"; //<!----- private key here $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->is_valid) { // Incorrect CAPTCHA input echo "Error\n"; die ("The reCAPTCHA wasn't entered correctly. Please go back and try it again.\n(reCAPTCHA said: " . $resp->error . ")"); } else { echo "Valid"; die(); } } add_action( 'wp_ajax_validate_captcha', 'validate_Captha' ); add_action( 'wp_ajax_nopriv_validate_captcha', 'validate_Captha' ); 

Solutions Collecting From Web of "Проверка Ajax для reCaptcha"

Просто выяснилось, что reCaptcha фактически отклоняет CAPTCHA, которые отправляются на их сервер более одного раза . Поскольку я использовал плагин WP-reCAPTCHA , плагин повторно отправил CAPTCHA после отправки AJAX. Поэтому я просто прокомментировал строку из плагина, который выполняет представление, которое находится в файле recaptcha.php , строка 27:

 $this->register_filters();