2016-01-01 5 views
1

Я использую PHP и AJAX вместе на своем веб-сайте для извлечения данных из URL-адреса JSON и отображения его на веб-странице. Когда я использую его, не выполняя recaptcha, он отлично работает, но когда я интегрирую Recaptcha от Google, результаты отображаются только тогда, когда головоломка captcha решается дважды каждый раз. Я не уверен, где ошибка на самом деле лежит, и я даже попытался реализовать пользовательскую капчу, и в этом случае тоже одно и то же. Вот код с рекапчи,Ajax вызов не работает должным образом при использовании с Recaptcha

Captcha и Ajax фрагмент кода:

<?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

+0

Учитывая сценарий, что ожидаемое поведение. – frz3993

+0

Где я иду не так? Есть ли решение проблемы? @ frz3993 –

+0

Первая загрузка скрипта '$ _POST' не существует, поэтому' $ resp' будет false, а ваша часть скрипта не существует. На первом отправлении '$ _POST' будет заполнено, а' $ resp' станет истинным, появится часть скрипта. Только на втором представлении скрипт будет эффективен. – frz3993

ответ

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.'; 
} 

Условный должны быть удалены/еще и предотвратить событие по умолчанию для сценария

<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> 
+0

Я попробую это и сообщит вам, работает оно или нет. –

+0

Мне понравилось: http://pastebin.com/vBE5UF3G , но теперь это не дает мне результатов. –

+1

Я вижу, что вы пытаетесь использовать '$ resp' в контексте функции. Вам необходимо передать его в качестве аргумента функции или использовать '$ _GLOBAL', чтобы его можно было использовать внутри контекста функции. В контексте функции '$ resp' будет не объявлен. – frz3993

Смежные вопросы