Javascript 如何在同一页面中验证hCaptcha,然后将答案重新更正为post/ajax.php?
我用的是别人写的脚本,我根本不懂javascript。 我想更改以下用例:如果按下按钮,它将显示一个带有验证码的模式。验证验证码后,页面将继续处理ajax.php的一些数据。我已经实现了适用于上一个验证码的代码,但我想通过hCaptcha来实现Javascript 如何在同一页面中验证hCaptcha,然后将答案重新更正为post/ajax.php?,javascript,php,captcha,Javascript,Php,Captcha,我用的是别人写的脚本,我根本不懂javascript。 我想更改以下用例:如果按下按钮,它将显示一个带有验证码的模式。验证验证码后,页面将继续处理ajax.php的一些数据。我已经实现了适用于上一个验证码的代码,但我想通过hCaptcha来实现 function goShortlink(sid) { $('#goShortlink').modal({backdrop: 'static', keyboard: false}); $('.captcha-hol
function goShortlink(sid) {
$('#goShortlink').modal({backdrop: 'static', keyboard: false});
$('.captcha-holder').CBCaptcha({
clickDelay: 500,
invalidResetDelay: 2500,
requestIconsDelay: 1500,
loadingAnimationDelay: 1500,
hoverDetection: true,
enableLoadingAnimation: true,
validationPath: 'system/libs/captcha/request.php'
}).bind('success.CBCaptcha', function(e, id) {
validateShortlink(sid);
});
}";
来自system/libs/captcha/request.php的验证路径为
<?php
session_start();
require('session.class.php');
require('captcha.class.php');
if((isset($_GET['hash']) && strlen($_GET['hash']) === 48) &&
(isset($_GET['cid']) && is_numeric($_GET['cid'])) && !isAjaxRequest()) {
CBCaptcha::getIconFromHash($_GET['hash'], $_GET['cid']);
exit;
}
if(!empty($_POST) && isAjaxRequest()) {
if(isset($_POST['rT']) && is_numeric($_POST['rT']) && isset($_POST['cID']) && is_numeric($_POST['cID'])) {
switch((int)$_POST['rT']) {
case 1:
$captcha_theme = (isset($_POST['tM']) && ($_POST['tM'] === 'light' || $_POST['tM'] === 'dark')) ? $_POST['tM'] : 'light';
header('Content-type: application/json');
exit(CBCaptcha::getCaptchaData($captcha_theme, $_POST['cID']));
case 2:
if(CBCaptcha::setSelectedAnswer($_POST)) {
header('HTTP/1.0 200 OK');
exit;
}
break;
default:
break;
}
}
}
header('HTTP/1.1 400 Bad Request');
exit;
function isAjaxRequest() {
return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
}
如何修改它以保持模态,直到验证hCaptcha,然后继续验证?我也有其余的代码,但我不知道这对我们的问题是否不重要。如果你需要它,请告诉我
谢谢你的好意和帮助 我使用了数据回调,它起了作用。解决验证码后,功能将继续:
<div class="h-captcha" data-sitekey="XXXX-XXX-XXX-XXX" data-callback="correctCaptcha"></div>
如何使用correctCaptcha属性发送正确的sid,而不是最后一段
谢谢你的仁慈和帮助
<?php
if($proxy === false)
{
echo '<script src="static/js/simple.timer.js"></script><script async src="static/js/captcha.min.js"></script>';
$script = "var waitMsg = \"".$lang['l_145']."\";
var captchaMsg = \"".$lang['l_142']."\";
var correctCaptcha = function validateShortlink(sid){
$('#status').html('<div class=\"alert alert-info\" role=\"alert\"><i class=\"fa fa-cog fa-spin fa-fw\"></i> '+waitMsg+'</div>').fadeIn('fast');
$.post('system/ajax2.php', { a: 'getShortlink', data: sid, token: '".$token."' },
function(response) {
if(response.status == '600') {
goShortlink(sid);
$('#status').html(response.message).fadeIn('slow');
} else if(response.status == '500') {
$('#captchaBox').hide();
$('#status').html(response.message).fadeIn('slow');
} else {
$('#status').html(response.message).fadeIn('slow');
window.setTimeout(function(){window.location.replace(response.shortlink);}, 500);
}
},'json');
};
function goShortlink(sid) {
$('#goShortlink').modal({backdrop: 'static', keyboard: false});
}";
if(count($counters) > 0)
{
$script .= '$(document).ready(function(){';
foreach($counters as $counter)
{
$script .= "$('#staticTime_".$counter."').hide(); $('#short_".$counter."').startTimer({onComplete: function(element){window.location.reload();}}); $('#short_".$counter." div').css('display','inline');";
}
$script .= '});';
}
$packer = new JavaScriptPacker($script, 'Normal', true, false);
$packed = $packer->pack();
echo '<script>'.$packed.'</script>';
}
?>
$sid = $db->EscapeString($_POST['data']);
$linkData = $db->QueryFetchArray("SELECT * FROM `shortlinks_config` WHERE `id`='".$sid."' AND `status`='1' LIMIT 1");
if(empty($linkData['shortlink']) || empty($linkData['password']))
{
$resultData = array('message' => '<div class="alert alert-danger" role="alert"><i class="fa fa-exclamation-triangle fa-fw"></i> '.$lang['l_482'].$_POST['data'].'</div>', 'status' => 500);
}
else
`P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNza2V5IjoiaHNxRWc0ZVdLUmNPTHZybGFxZ0p4djlsTlVLYktIQ2VOaUI3Mmw3VmZqa21kVDh5Q0Q5N2NoSHBHbjJ2dHdXRWU3YnU2OGtpZHB4eVpJYllzTFBDay9MMXVIZXFicVN1QTVUSWxmU2txcGU3ZnMxOUFVOGk1a0IvQ2JRUkU5ZDluL2FHZTF2amUxNnZpM085UE9PVGcwR1JyOWFsYXNMK2h2UitPWG5jcWFmVzhQNXlCU0sydm9TakhZNkVSbzJ1ZEh4TWIyQmN0bzFPZEVCdnViRjhjT3FYRVhMUXF1WTN1Z1EyVDdhR2xGK28xTkRHRGkzZVM5MXVBTmUxSVE4M1NSYkFpN253MnNVdFRzVDJyYWs0OUVGdXFHOHgzbjBhRENSMnpvZGRYSGFUUEtBLzNFTUpVVDBWU1NSRWtuVjBiY01oVktzSmF1R0pKcjlwSnJwaUl2N3NKSlJBVm9pOW5ZVGt6K3hKOTlOcHVKRG9SdDR1QmxKeW1ndWcvL0x2N3NDK2JMSnBzeENSM3U5Ly9wcnlwd3R5ZWlmZHRZNlM2UERmUG00eFNQTERwNGdnS2NUbGNqYjFkeU9ZTVFiaFEyWi8rakJkV2lZMG1QQ20yRnFRVVhoME9CdjJtNGdoRGplOUJYNm15ZUR4UFZYdEN6R214UVJOTTZrWDRlOGtZY3JqUlNzYk96OXNjaXBQL2REOHNCSzlTNjJLc2dTNkFpczM0ZnFqcXFTRHRKN0xGUjc4UlYycWlCcFQvK2JweC9hOEgwdjd6eXM5aHRYZ1lrdU5YQ0hQc0x4ZWRHek1YVWtPRTdVVjNhMzNTcVg4bFhnL0RxTFA3cFVrb3RLWU1qcjZ5OUp5cDdxME1UUWN5Zy9XN290WE5ucTlNNnRHcU4xRW9uWVAxQ1dmckZKTENyck1XVUdkb01LQy9mSmFuZE0rMzZManpuRzNGWmhpREFIM1U5clF0RjNCeUdWNnUrcTBaTHdWV0FQSFZHcWdac3ZSTGxrY1V2RzRPNDg4RHpzVmVDQ3FxMFczOTNwR0hYeFpNWTBxWmFqTzlBZEpGd1EySG94akdOTWorWVZXRlJ6WUdhbS84VFFVZVBWejdZLzBuVmF5NHRwNzhJNXlYTmliUVBxM0d0MC9MV1BVS3ZCUnd5ZXlCbkF2R0Q3eDJEdmJ5djZVNGorTnpNakJaQnJhVjlSclEvd2pDaEEyS0dHSURYQk0zTTBhekMva3hIZDJacG95c2x1bFNKWUhyRC9iL1JVUFZkdVFJNXFtQ09mdUtWeHlUREVseDY4SVZuNTN3TG1GK3ZzcHg5dEhUbXUxQ2ZEcmwzcnd0RjhNOHlqV2NzUTdEc3JKd0MzYXlxZVJSMVRhcGJkSXN4bHZRcE9NWW1EQWtwMzhWMk9ZaWNHazQyZlBoSGtCYlcraXYrZUY5dXV2RWozcGkxaUlhb0tNVTNvNkRzaEJxbVlDSFFvbVNjSDQ5R1pRUmlWZHZSQy92N0V2ekN2ejBrcXBkZ3RsYm0yd3pUVXdiSGZEUEFFaFlONWhiN2F4aUpYdzN2WTBNcUk5L1ZVMENoZkZqVE1QWHRVQWNCd3p0Qkl4N25rQXdpaHdsYms3ZnlrVVgvSjRtMlYxdWNjTUQ4bFllT00zWXZCd0ZmU1hRckFkOVRoL1JVbXhNQnhEVElpZDVaYkFGSjBLRm93RXlWRnlFTUlJYUZyNHdKKy9ReTdDSjVEeVNiQlBxQWtiUEdSSCtUSDc0MFlxampma2IxRkx6eTBPMVBFMGkxaWRWd1p1bUtOSE1LajhGSi9pT3JTUFMrKzM5K0o1VzMxZ3A2dEcvM3NpM0M4WEt5WTIrV0pNdWJaZklDa2xhenIzREFQZm5ENFFSN2ovcEJvNkRqN2Q4YnIraTQzcTZyRDhnMzVPMVZseE5pOU9Hb0tRTHVQY3BtdG1Ib2ovZFUwa05Xb0hZUTNza3hreDZiY3BRWE1COUhMN2NuMXFNb0JyQUZtUUQzTnp3UWxVS2Z3cmNQSHRqZWxpZWJnWXU1MkwxOTFhWG5Id09nUUtIcU53b3REZmhjeVFlMW56STFPV1M3U1pQVVZCNS9NcUNzWC84cGhlQmdwenRFNW5LWXo1QnVsTEhtSk9MWnV2RG1Ya05WRkcwL0lXTGJzY1U1OEpXYUIzRXlsTFJud1ZhN1d0RFF0NlZuNzB4a1RxK254MEEzUkVZTjREa0Z1akVVd2ZrakZTQm0vamswN21LZlRqRlp3UkZON0Vkd0UwcXEyeDNmbDRRSGlqTUg4UDVnYXVSWDl1NTR2dlpWS08xWTRsQUlEK3dLSEw4d2ZLOGlXQzNUV0t3NWMvblpXUVVES1JwSjFQeUJnOWdEOVVFQk1PZTFVVGZCNUsvcXhEYkdvUmp4SjBoU1JsSnFhNkErYUdqWnBJSHJ1aS9vZUhkM0VCTkowd1NsNEVGc2NPaGQ4OHpVUXFjWmVYaENsZW9WM2FZbGZiYnpsY0x2dG0yVTMxaEZzV1lOTXFEdFlRVE5sVUwzblRxSlVNbmM5UUlCQTVidXg3ejUwQ2NRVUNTUHg1UE1Jc09QV3Y3MllQQWg1c2NGbllvcVZCNlRMeXh3VzRZamdFYkNSMWQrdnJRbE9hbjc3Nm1DeHVLRWhvZzA1cVY2OFJuTElnOStYa0pHR0JDcUkvQ1BSbWZremplckgwM3dYN1JZMWQ4SVdmL0Fqd0IrUVRvc09aZ3dBZ2g0MytjNlkyWVRyTWFnazJIMEJoMmMwV3lVSVozdmowSmZUY09wNG4iLCJleHAiOjE2MDMxODc2NjcsInNoYXJkX2lkIjoyMzU4MDExNjcsInBkIjowfQ.fDyx5hr2vXLScCpXO5G1nzE6yH-