次のコードを(「カートンのダークサイド」経由で)使用して、キャプチャフィールドを含むフォームの残りの部分を送信する前に、reCAPTCHAフィールドを検証しています。
検証は正常に機能し、「recaptchavalidate」ページが呼び出され、TrueまたはFalseが正しく返され、JavaScriptがこれをすべて取得します(これはalert(html);でテストします)。
ただし、Trueの場合、フォームは期待どおりにサビットされ続けません。実際、さらに悪いことに、reCAPTCHAは応答が間違っているかのように更新されます。
reCAPTCHAではなくJavaScriptに問題があると思いますが、どこが間違っているのでしょうか。
<script type="text/javascript">
$(function(){
function validateCaptcha()
{
challengeField = $("input#recaptcha_challenge_field").val();
responseField = $("input#recaptcha_response_field").val();
// alert(challengeField);
// alert(responseField);
//return false;
var html = $.ajax({
type: "POST",
url: "recaptchavalidate",
data: "recaptcha_challenge_field="+challengeField+ "&recaptcha_response_field="+responseField,
async: false
}).responseText;
if(html == "True")
{
$("#captchaStatus").html(" ");
alert(html);//test
return true;
}
else
{
$("#captchaStatus").html("Your captcha is incorrect. Please try again");
alert(html);//test
Recaptcha.reload();
return false;
}
}
$("#signup").submit(function(){
return validateCaptcha();
});
});
</script>
編集:これは、送信する前にエラーがないことを確認するためにのみ使用されます。reCAPTCHAは、送信後に適切にチェックされます(JSではなくPythonを介して)。したがって、一部のユーザーが指摘しているほど大きなセキュリティホールではありません。