php Примерработысформойбитриксаякс(модуль)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php Примерработысформойбитриксаякс(модуль)相关的知识,希望对你有一定的参考价值。

/* ajax форма */
    $('.js_ajax-form').submit(function () {
        var form = $(this),
            formData = new FormData(form[0]),
            xhr = new XMLHttpRequest();

        form.find('.js_submit-button').addClass('disabled').attr("disabled", true);

        xhr.open("POST", "/ajax/sendForm.php", true);
        xhr.send(formData);
        xhr.onreadystatechange = function() {
            if (xhr.readyState != 4) return;

            if (xhr.status != 200) {
                console.log(xhr.status + ': ' + xhr.statusText);
            } else {
                var answer = JSON.parse(xhr.responseText);

                if (answer.status) {
                    form.find('.js_form-errors').html("");
                    form.find('.js_form-success').html(answer.success);
                    setTimeout(function() {
                        form[0].reset();
                        form.find('.js_form-success').html("");
                        $('.modal').modal('hide')
                    }, 3000);
                } else {
                    form.find('.js_form-errors').html(answer.errors);
                }


                form.find('.js_submit-button').removeClass('disabled').attr("disabled", false);

                captchaArray.forEach(function(item) {
                    grecaptcha.reset(item);
                });
            }
        };

        return false;
    });
    /* ajax форма */
<?php
use Bitrix\Main\Context;

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

$arAnswer['status'] = false;

$request = Context::getCurrent()->getRequest();

if (!CModule::IncludeModule("form"))
    die();

$server = Context::getCurrent()->getServer();

$arRequest['recaptcha'] = $request->getPost("g-recaptcha-response");
$arRequest['addr'] = $server->getServerAddr();


$errors = array();
$arValues = array();

$webFormID = $request->getPost("WEB_FORM_ID");

if (CForm::GetDataByID($webFormID, $form, $questions, $answers)) {

    foreach ($answers as $key => $answer) {
        $answerKey = 'form_'.$answer[0]['FIELD_TYPE'].'_'.$answer[0]['ID'];

        $arValues[$answerKey] = $request->getPost($answerKey);
        if ( ($questions[$key]['REQUIRED'] == 'Y') && (strlen(trim($arValues[$answerKey])) == 0) )
            $errors[] = 'Заполните поле "'.$questions[$key]['TITLE'].'"';
    }
}

foreach ($_FILES as $key => $arFile) {
    $arValues[$key] = $arFile;
}

if (!$request->getPost('policy'))
    $errors[] = 'Необходимо согласиться с условиями «Пользовательского соглашения»';

if (!takeCaptcha($arRequest['recaptcha'], $arRequest['addr']))
    $errors[] = 'Пройдите проверку на робота';

if (count($errors) > 0) {
    $arAnswer['errors'] = '<p>'.implode('<br />', $errors).'</p>';
} else {
    if ($RESULT_ID = CFormResult::Add($webFormID, $arValues)) {
        if (CFormResult::Mail($RESULT_ID)) {
            $arAnswer['status'] = true;
            $arAnswer['success'] = '<p>Ваша заявка отправлена!</p>';
        } else {
            $arAnswer['errors'] = '<p>Ошибка при отправке сообщения! Обратитесь к администратору сайта</p>';
        }
    } else {
        $arAnswer['errors'] = '<p>Ошибка при создании сообщения! Обратитесь к администратору сайта</p>';
    }
}


echo json_encode($arAnswer);

function takeCaptcha($hash, $addr) {
    $request = new \Bitrix\Main\Web\HttpClient();

    $post = $request->post("https://www.google.com/recaptcha/api/siteverify", Array(
        "secret" => "6Ldm4zQUAAAAAKA9ow4p-GaKaaFE439elzCrVAdW",
        "response" => $hash,
        "remoteip" => $addr
    ));
    $post = json_decode($post);
    if ($post->success == 'true') {
        return true;
    }

    return false;
}

以上是关于php Примерработысформойбитриксаякс(модуль)的主要内容,如果未能解决你的问题,请参考以下文章

php Функцияскачиванияфайла$ b $bПростоотправляемнаурлсобработчиком,передаваяссылкунафайл

python РаботысданнымипосредствомDjangoORMизстороннихфайлов

php Полезныеклассыбитриксаифункиидляработысфайлами

text Решениепроблемысфайлом房东наноуте

php Фиксированныйблок,которыйпоявляетсякакмагия

html Примерныйспособмикроразметкиконтактов