【问题标题】:Ajax call not working properly when used with Recaptcha与 Recaptcha 一起使用时,Ajax 调用无法正常工作
【发布时间】:2016-01-01 17:27:47
【问题描述】:

我在我的网站中同时使用 PHP 和 AJAX 从 JSON URL 获取数据并将其显示在网页上。当我在没有实现验证码的情况下使用它时,它可以正常工作,但是当我集成谷歌的验证码时,只有当验证码谜题每次解决两次时才会显示结果。我不确定错误实际上在哪里,我什至尝试实现自定义验证码,在这种情况下也是一样的。这是带有recaptcha的代码,

验证码和 Ajax 代码 sn-p:

<?php
if ($resp != null && $resp->success):  ?>

echo"hi";

<script>
$(document).ready(function(){

$("#submit").click(function(){

$.post("retrieve_train_between_stations.php", $("#get_train_running").serialize(),  function(response) {  
 $("#success").html(response);


});
return false;


});

});
</script>


<?php
else:
echo "Failed";

?>

完整代码: http://pastebin.com/UynEiYng

【问题讨论】:

  • 鉴于您的脚本,这是预期的行为。
  • 我哪里出错了?这个问题有什么解决办法吗? @frz3993
  • 脚本$_POST 的第一次加载不存在,所以$resp 将是假的并且您的脚本部分不存在。在第一次提交时,$_POST 将被填充,$resp 将变为真,脚本部分就存在了。只有在第二次提交时,脚本才会生效。
  • 我的建议,让retrieve_train_between_stations.php 检查recaptcha,使脚本始终可用(删除if/else),防止单击提交时的默认行为。并检查isset($_POST).
  • @frz3993:哦,非常感谢您的建议,我会尝试并让您知道!再次感谢您!

标签: javascript php jquery ajax recaptcha


【解决方案1】:

这部分应该移到retrieve_train_between_stations.php

require_once "recaptchalib.php";
// your secret key
$secret = "My secret key"; 
// check secret key
$reCaptcha = new ReCaptcha($secret);

$resp = false;

if (isset($_POST["g-recaptcha-response"])) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $_POST["g-recaptcha-response"]
    );
}

if ($resp) {
    //display the record
} else {
    echo 'Recaptcha can not be verified.';
}

if/else 应该被移除并阻止脚本的默认事件

<script>
$(document).ready(function(){

$("#submit").click(function(event){
    event.preventDefault();
    $.post("retrieve_train_between_stations.php", $("#get_train_running").serialize(),  function(response) {  
 $("#success").html(response);


        });
        return false;

    });

});
</script> 

【讨论】:

  • 我会试试这个,会告诉你它是否有效。
  • 我确实喜欢这样:pastebin.com/vBE5UF3G 但现在它没有给我返回结果。
  • 我可以看到您正在尝试在函数上下文中使用$resp。您需要将它作为参数传递给函数或使用$_GLOBAL,以便它可以在函数上下文中使用。在函数上下文中$resp 将是未声明的。
  • 是的,你是对的!我没有意识到!现在我改变了它,它工作正常 :) 非常感谢,我在 stackoverflow 上也找到了另一个解决方案,这是替代方案:stackoverflow.com/questions/27274157/… 希望它有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2013-10-08
  • 2017-11-21
相关资源
最近更新 更多