использование reCAPTCHA с ajax .... проблема загрузки javascript
Я пытаюсь реализовать reCAPTCHA в одной из моих форм, ... но я использую ajax в качестве представления. (В частности, прототип ajax.updater)
Как только я отправляю и проверяю свою форму на ошибку, я пытаюсь загрузить виджет reCAPCHTA (в моем обновленном элементе div), который в основном просто вызывает файл javascript следующим образом:
<script type="text/javascript" src="http://api.recaptcha.net/challenge?k=6Le6SwUAAAAAAIWm8wCRFd8SrI-H0R1Yx4Tkw2Ks"></script>
Однако файл JS не читается? ... и я пробовал все комбинации evalScripts: true и evalJS: 'force' и т.д. в ajax.updater ..... однако я не думаю, что у меня есть очень хорошее понимание того, почему файл js не обрабатывается :(
Если кто-нибудь сможет пролить свет на этот вопрос, я буду очень признателен.
Спасибо, Андрей
Ответов (7)7
У меня были аналогичные проблемы с хорошей reCaptcha
игрой при загрузке на страницу с помощью .load()
метода jQuery . Вот страница с новым решением: http://www.maweki.de/wp/2011/08/recaptcha-inside-a-with-jquery-ajax-or-load-dynamically-loaded-object/
В основном API reCaptcha использует метод document.write для отображения reCaptcha. Когда вы получаете вызов jQuery, это не сработает. Используйте этот PHP-код вместо загрузки recaptcha.js
<?php
$api = file_get_contents('http://www.google.com/recaptcha/api/js/recaptcha_ajax.js');
$api = str_replace('document.write','$("body").append',$api);
echo $api;
?>
Он просто находит файл document.write и заменяет его на $(selector).append
.
Сделал мою реализацию работы.
Привет друг, я нашел ответ
https://developers.google.com/recaptcha/docs/display?hl=es#AJAX
И в этом как проверить
http://blog.reaccionestudio.com/comprobar-recaptcha-con-ajax-usando-jquery/
Удачи тебе
Будьте осторожны при использовании любых клиентских сценариев, таких как JavaScript, для проверки. У вас нет контроля над браузером конечного пользователя. Цель CAPTCHA - предотвратить автоматическую отправку формы. У любого, кто достаточно опытен, чтобы это настроить, не возникнет проблем с отменой проверки вашего JavaScript и проверки CAPTCHA. Например, они могут настроить validateCaptcha () так, чтобы он всегда возвращал истину, минуя ваши тщательные проверки, или просто отключите JavaScript.
При этом нет ничего плохого в том, чтобы выполнить всю отправку формы с помощью ajax и использовать результаты проверки CAPTCHA, чтобы определить, обрабатывается ли форма или нет.
Важным моментом является то, что решение о том, обрабатывать форму или нет, должно приниматься на стороне сервера, а не на стороне клиента.
чтобы ответить на свой вопрос ...
есть api reCAPTCHA AJAX .... это довольно простой способ обойти эту проблему:
Кроме того, .. документация на сайте http://www.prototypejs.org/api/ajax/updater ... говорит о параметре evalscript и о том, как он помещает любой javascript только через встроенную функцию eval () .. ... что меня сбивает с толку, пытаясь реализовать проверку ошибок с помощью ОМП ... но это уже другая история.
Эндрю
Это не решает вашу точную проблему, но в « Темной стороне коробки » есть отличный код для проверки reCAPTCHA через jQuery AJAX, который может помочь.
В итоге:
Добавьте следующий Javascript:
$(function() {
function validateCaptcha() {
var challengeField = $('input#recaptcha_challenge_field').val(),
responseField = $('input#recaptcha_response_field').val();
// alert(challengeField);
// alert(responseField);
// return false;
var html = $.ajax({
type: 'POST',
url: 'ajax.recaptcha.php',
data: "recaptcha_challenge_field=" + challengeField + "&recaptcha_response_field=" + responseField,
async: false
}).responseText;
if (html.replace(/^\s+|\s+$/, '') == "success") {
$('#captchaStatus').html(' ');
// Uncomment the following line in your application
return true;
} else {
$('#captchaStatus').html(
'Your captcha is incorrect. Please try again'
);
Recaptcha.reload();
return false;
}
}
// Modified as per comments in site to handle event unobtrusively
$('#signup').submit(function() {
return validateCaptcha();
});
});
Затем добавьте файл ajax.recaptcha.php, который: «выводит только слово« успех », если капча совпадает, и сообщение и ответ от reCaptchta в случае сбоя. Это важно, потому что мы ищем слово« успех »в нашем validateCaptcha ( ) функция ".
require_once('/inc/recaptchalib.php');
$publickey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // you got this from the signup page
$privatekey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$resp = recaptcha_check_answer(
$privatekey,
$_SERVER['REMOTE_ADDR'],
$_POST['recaptcha_challenge_field'],
$_POST['recaptcha_response_field']
);
if ($resp->is_valid) {
?>success< ?
} else {
die(
"The reCAPTCHA wasn't entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")"
);
}
Пример на PHP, но я легко адаптировал его для работы с Zope / Python.