Как загрузить данные из PHP после капчи без перезагрузки страницы?
Есть решение
Приветствую.
Опишу ситуацию, чтобы было понятно.
Есть страница сайта. Перед ее отдачей работает код PHP. Этот код проверяет IP-адрес посетителя. Если с IP-адресом все нормально, то посетитель увидит перед собой страницу сайта. Если же IP-адрес попадает под фильтр, то вместо страницы посетитель увидит перед собой капчу. Ну, а как это обычно бывает: если посетитель решает капчу, то ему показывается страница, а если не решает — будет решать капчу до бесконечности, если не надоест, разумеется.
Я не пойму то, как можно отдать посетителю страницу после решения им капчи без перезагрузки страницы. Сайт работает на PHP.
Опишу текущую реализацию, чуть упростив ее сокращением кода.
Встроенный в страницу код проверки
captcha.html
request_response.php
И на этом шаге я застрял: получаю ответ из PHP-обработчика и перезагружаю страницу через JS. Хотелось бы при успешности прохождения капчи как-то отдавать страницу без ее перезагрузки через JS.
Предполагаю, что есть какая-то возможность на этапе проверки IP-адреса в условии if-else прервать выполнение показа страницы и показать ее после прохождения капчи. В PHP/JS я не силен. Подскажите, пожалуйста, решение, если оно есть.
Если это имеет значение, то PHP код проверки подключен файле index.php командой include_once.
Опишу ситуацию, чтобы было понятно.
Есть страница сайта. Перед ее отдачей работает код PHP. Этот код проверяет IP-адрес посетителя. Если с IP-адресом все нормально, то посетитель увидит перед собой страницу сайта. Если же IP-адрес попадает под фильтр, то вместо страницы посетитель увидит перед собой капчу. Ну, а как это обычно бывает: если посетитель решает капчу, то ему показывается страница, а если не решает — будет решать капчу до бесконечности, если не надоест, разумеется.
Я не пойму то, как можно отдать посетителю страницу после решения им капчи без перезагрузки страницы. Сайт работает на PHP.
Опишу текущую реализацию, чуть упростив ее сокращением кода.
Встроенный в страницу код проверки
// вот такой код выполняется перед показом страницы посетителю
// если ip не подходит, то показываем ему капчу (captcha.html)
// если ip нормальный, то показываем страницу (index.html)
<?php
// Проверка IP
$ip = $_SERVER['REMOTE_ADDR'];
if ($ip == "XX.XX.XX.XX") {
include 'captcha.html';
exit;
} else {
// Блок else можно и не использовать
include 'index.html';
exit;
}captcha.html
<!-- работает через яндекс.капчу -->
<!-- капча запрашивает данные с сервера яндекса через js и вставляет их в атрибут -->
<!-- полученные данные через js отправляют в php обработчик (request_response.php) -->
<!doctype html>
<html lang="en">
<head>
<script src="https://smartcaptcha.yandexcloud.net/captcha.js" defer=""></script>
</head>
<body>
<div
id="smart-captcha"
class="smart-captcha"
data-callback="check_token"
></div>
<script>
function check_token(token) {
// получаю токен капчи из поля
var token_block = document.querySelector("#smart-captcha > input[type=hidden]");
var token = token_block.getAttribute("name");
// формирую данные
var data = {};
data["token"] = token;
// отправляют данные в обработчик
fetch("request_response.php", {
"method": "POST",
"headers": {
"Content-Type": "application/json; charset=utf-8"
},
"body": JSON.stringify(data)
}).then(function(data) {
console.log(data);
if (data["passed"] == "passed") {
// если капча пройдена, то перезагружаю страницу
window.location.reload();
}
})
}
</script>
</body>
</html>request_response.php
// в обработчике отправляется запрос к серверу яндекса
// яндекс может вернуть два ответа: все хорошо + что-то не то
// если все хорошо, тогда надо показать посетителю страницу
// и делаю я это, отправляя в скрипт о том, что все хорошо
// скрипт перезагружает страницу, если все хорошо
if(isset($_POST)){
// отправка запроса к яндексу
// получение ответа
// формирование json для ответа в js
// отправка ответа в js
echo json_encode($dats);
}И на этом шаге я застрял: получаю ответ из PHP-обработчика и перезагружаю страницу через JS. Хотелось бы при успешности прохождения капчи как-то отдавать страницу без ее перезагрузки через JS.
Предполагаю, что есть какая-то возможность на этапе проверки IP-адреса в условии if-else прервать выполнение показа страницы и показать ее после прохождения капчи. В PHP/JS я не силен. Подскажите, пожалуйста, решение, если оно есть.
Если это имеет значение, то PHP код проверки подключен файле index.php командой include_once.
Комментарии: 5
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Типо если капча выполнена показывается контент