Недавно читал здешний форум и наткнулся на тему где спрашивают как сделать обновление каптчи без без перезагрузки страницы. В одном из моих проектов я сталкивался с этой задачей. [spoiler]Нужно было создать регистрационную форму чтобы все поля проверялись "на лету", ну и естественно каптча тоже должна обновляться "на лету" без перезагрузки. По умолчанию в битриксе такой функции нет, поэтому ее пришлось реализовывать вручную.
Т.к. требуется получить новую картинку каптчи без перезагрузки страницы, значит нам потребуется использовать технологию . При этом необходимо создать java-скрипт для клиентской части и php-скрипт для сервера.
Для клиентского скрипта я использовал библиотеку
Функцию refresh нужно повесить на событие при клике на текст "обновить картинку" или что то наподобие. И соответственно в шаблоне компонента регистрации для тега вывода каптчи нужно установить id="code", а у скрытого поля которое передает идентификатор каптчи установить id="sid"
Не много отредактировал клиентскую часть:
При первых пяти обновлениях, картинка обновляется, но текст остается тот же.
Отдельное спасибо за идею: Антон Долганин, Эльдар Рахимбердин.
Т.к. требуется получить новую картинку каптчи без перезагрузки страницы, значит нам потребуется использовать технологию . При этом необходимо создать java-скрипт для клиентской части и php-скрипт для сервера.
Для клиентского скрипта я использовал библиотеку
function cptRefresh() {
var countOfexec = 0;
var code = $("#sid").val();
return function() {
if(countOfexec < 5) {
var timestamp = new Date();
$('#code').attr("src", "/bitrix/tools/captcha.php?captcha_sid="+code+"×tamp="+timestamp.getTime());
} else {
$.get("/chat/chat.php", function(data){
$("#sid").val(data);
$('#code').attr("src", "/bitrix/tools/captcha.php?captcha_sid="+data);
});
countOfexec = 0;
}
return ++countOfexec;
}
}
var refresh = cptRefresh();
|
Функцию refresh нужно повесить на событие при клике на текст "обновить картинку" или что то наподобие. И соответственно в шаблоне компонента регистрации для тега вывода каптчи нужно установить id="code", а у скрытого поля которое передает идентификатор каптчи установить id="sid"
// Подключаем класс битрикса для работы с captcha include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/captcha.php"); // Создаем экземпляр класса $cpt = new CCaptcha(); // Удаляем текущую каптчу $cpt->Delete($_REQUEST['captcha_sid']); // Генерируем и выводим код новой каптчи echo htmlspecialchars($APPLICATION->CaptchaGetCode()); |
Не много отредактировал клиентскую часть:
При первых пяти обновлениях, картинка обновляется, но текст остается тот же.
Отдельное спасибо за идею: Антон Долганин, Эльдар Рахимбердин.
