Получение reCaptcha для работы над Ajax с jQuery - PullRequest
3 голосов
/ 29 марта 2011

У меня есть форма, которая проверяет и публикует сообщения с помощью Ajax или, более конкретно, с помощью $.post().

. В какой-то момент есть reCaptcha.Эта форма работала нормально, когда я не использовал $.post(), но опубликовал старомодный способ (с обновлением страницы), просто для справки.

Преобразование формы требует, чтобы я изменил все $_POST на$_REQUEST s.Тем не менее, это не решает проблему reCaptcha, поэтому я оставил ее без изменений.Вот PHP-код reCaptcha внутри registerPost.php:

  require_once('recaptchalib.php');
  $privatekey = "dropbeatsnotbombs";
  $resp = recaptcha_check_answer ($privatekey,
                            $_SERVER["REMOTE_ADDR"],
                            $_POST["recaptcha_challenge_field"],
                            $_POST["recaptcha_response_field"]);

 if (!$resp->is_valid) {
// What happens when the CAPTCHA was entered incorrectly
echo "Error";
}
else {
   //post form
}

Вот jQuery, обрабатывающий отправку формы:

$.post('php/registerPost.php', $('#registerPost').serialize(), function(data){
                if(data == "Error")
                {
                    $('#caErr').show();
                }
                else
                {
                    window.location.replace("//main page");
                }
            });

Примечание: reCaptcha кажется вернуть как ложное, так как форма не будет отправлена, когда все заполнено правильно.

Что я хочу сделать, это показать ошибку, если reCaptcha была введена неправильно, и опубликовать, если она была введенаверно, все асинхронно.

Любая помощь?

1 Ответ

2 голосов
/ 29 марта 2011

Хм.Мне нужно прочитать документацию по API для $ .post (), но я думаю, что поскольку форма на самом деле не отправлена, массив $ _POST не заполняется, поэтому, когда вы используете значения типа $_POST["recaptcha_challenge_field"], это простопустое поле.Опять же, мне нужно проверить это, но это моя догадка.

РЕДАКТИРОВАТЬ:

Похоже, я был не прав.Я сравнил то, что у вас есть, и с API, и со старым скриптом, который у меня был, и то, что вы делаете, должно быть хорошо.Единственное отличие, которое я вижу, заключается в том, что вы передаете это как данные:

$('#registerPost').serialize()

, тогда как мой сценарий передает это:

$('#form').serializeArray()

Это может быть так просто ...1014 *

...