Используя reCAPTCHA с ajax.... проблема загрузки javascript
Я пытаюсь реализовать reCAPTCHA в одной из моих форм, но я использую ajax в качестве представления. (Более конкретно, прототип ajax.updater)
Как только я отправляю и проверяю ошибку в своей форме, я пытаюсь загрузить виджет reCAPCHTA thingy (в моем обновленном элементе div), который в основном просто вызывает файл javascript следующим образом:
<script type="text/javascript" src="http://api.recaptcha.net/challenge?k=6Le6SwUAAAAAAIWm8wCRFd8SrI-H0R1Yx4Tkw2Ks"></script>
Однако JS файл не читается?... и я пробовал всю комбинацию evalScripts: true и evalJS: "force" и т.д. в ajax.updater..... однако я не думаю Я очень хорошо понимаю, почему файл js не обрабатывается: (
Если кто-то может пролить свет на эту проблему, я буду очень благодарен.
Спасибо, Андрей
Ответы
Ответ 1
Это не касается вашей конкретной проблемы, но Dark Side of the Carton имеет отличный код для проверки 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
Ответ 2
Будьте внимательны, используя валидацию любого типа клиентской стороны script, например JavaScript. У вас нет контроля над браузером конечных пользователей. Цель CAPTCHA - предотвратить автоматическое представление формы. Любой, достаточно сложный, чтобы установить это, не будет иметь проблемы с переопределением проверки JavaScript и проверки CAPTCHA. Например, они могут установить validateCaptcha(), чтобы всегда возвращать true, минуя ваши тщательные проверки - или просто отключить JavaScript.
Сказано, что нет ничего плохого в выполнении всего представления формы с помощью ajax и использовании результатов проверки CAPTCHA, чтобы определить, обрабатывается ли форма или нет.
Важным моментом является то, что решение о необходимости обработки формы должно выполняться на стороне сервера, а не на стороне клиента.
Почему проверка на стороне клиента недостаточно...
Ответ 3
чтобы ответить на мой собственный вопрос...
есть reCAPTCHA AJAX api.... что довольно простой способ обойти эту проблему:
текст ссылки
Кроме того, документация на http://www.prototypejs.org/api/ajax/updater сайте... говорит об опциях evalscript и как только помещается любой javascript через встроенную функцию eval().... какой тип винтов меня пытается пытаться выполнить проверку ошибок с помощью ОМУ... но это другая история.
Эндрю
Ответ 4
Если этот фрагмент кода вы используете, вы не закрыли тег... поэтому он не будет оцениваться.
Ответ 5
вызов Recaptcha.reload(); на событие обратного вызова в вашем коде Ajax., он будет перезагружать новую Recapcha каждый раз, когда Ajax отправлен
Ответ 6
Привет, друг, я нашел ответ
https://developers.google.com/recaptcha/docs/display?hl=es#AJAX
И в этом как validate
http://blog.reaccionestudio.com/comprobar-recaptcha-con-ajax-usando-jquery/
Успех для вас
Ответ 7
У меня были схожие проблемы с получением reCaptcha
, чтобы играть красиво при загрузке на страницу с помощью jQuery .load()
. Вот страница с новым решением: http://www.maweki.de/wp/2011/08/recaptcha-inside-a-with-jquery-ajax-or-load-dynamically-loaded-object/
В основном API reCaptcha использует метод document.write для отображения reCaptcha. Когда вы вызываете jQuery invlued, это не сработает. Используйте этот код 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
.
Сделал мою работу по внедрению.