использование 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)

У меня были аналогичные проблемы с хорошей 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 .

Сделал мою реализацию работы.

вызовите Recaptcha.reload (); при событии обратного вызова в вашем коде Ajax., он будет перезагружать новую Recapcha каждый раз, когда Ajax отправляет

Привет друг, я нашел ответ

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 + "&amp;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.