Здравствуйте, уважаемые посетители форума!
Очень прошу Вас помочь с неприятной ситуацией с формами.
Я использую сервис web-формы в битрикс, и при помощи ajax отправляю данные.
По факту все отрабатывается как надо, результаты формы записываются, а настроенное мною событие отправки почты работает без нареканий.
Но пользователь сайта видит просто бесконечную прокрутку на кнопке (Что говорит ему, что форма в процессе отправки).
В консоли разработчика я вижу ошибку
Хотя я настроил все права на сервере, владельца и группу (apache:apache. на папки 0755 на файлы 0644).
Если напрямую обратиться по этому файлу, то я получаю массив
Да и сам компонент веб-формы настроен на обработку этой переменной.
В чем же может быть дело? Костыльно не хочется решать эту проблему (типа убрать класс загрузки спустя n-е количество времени или постоянно писать пользователю, что заявка принята, вне зависимости от ошибок с заполнением формы)).
Помогите, пожалуйста, с решением этой проблемы.
Вот содержимое файла-отправителя ajax:
Это шаблон php для вывода переменной SUCCESS:
Очень прошу Вас помочь с неприятной ситуацией с формами.
Я использую сервис web-формы в битрикс, и при помощи ajax отправляю данные.
По факту все отрабатывается как надо, результаты формы записываются, а настроенное мною событие отправки почты работает без нареканий.
Но пользователь сайта видит просто бесконечную прокрутку на кнопке (Что говорит ему, что форма в процессе отправки).
В консоли разработчика я вижу ошибку
Код |
---|
Error requesting page /bitrix/templates/dresscodeV2/components/bitrix/form.result.new/twoColumns/ajax.php?FORM_ID=5&SITE_ID=s1&WEB_FORM_ID=5 |
Если напрямую обратиться по этому файлу, то я получаю массив
Код |
---|
{"SUCCESS":"Y"} |
Да и сам компонент веб-формы настроен на обработку этой переменной.
В чем же может быть дело? Костыльно не хочется решать эту проблему (типа убрать класс загрузки спустя n-е количество времени или постоянно писать пользователю, что заявка принята, вне зависимости от ошибок с заполнением формы)).
Помогите, пожалуйста, с решением этой проблемы.
Вот содержимое файла-отправителя ajax:
Код |
---|
$(function(){ var sendWebForm = function(event, data){ var formData = new FormData(this); var requiredErrorPosition = false; var requiredError = false; var $thisForm = $(this).addClass("loading"); var $parentThis = $thisForm.parents(".webFormDw"); var $thisFormFields = $thisForm.find(".webFormItemField"); var $thisFormErrors = $thisForm.find(".webFormItemError"); var $submitButton = $thisForm.find('input[type="submit"]').addClass("loading"); var $webFormError = $thisForm.find(".webFormError"); var $webFormCaptchaSid = $thisForm.find(".webFormCaptchaSid"); var $webFormCaptchaImage = $thisForm.find(".webFormCaptchaImage"); var formId = $parentThis.data("id"); $thisFormFields.each(function(i, nextField){ var $nextField = $(nextField); if($nextField.data("required") == "Y"){ var $nextFieldEx = $nextField.find('input[type="text"], input[type="password"], input[type="file"], select, textarea'); if($nextFieldEx.attr("name")){ if(!$nextFieldEx.val() || $nextFieldEx.val().length == 0){ $nextFieldEx.addClass("error"); if(!requiredError){ requiredErrorPosition = $nextFieldEx.offset().top; requiredError = true; } } } } }); var $personalInfo = $thisForm.find("#personalInfoFieldStatic"); if(!$personalInfo.prop("checked")){ $personalInfo.addClass("error"); requiredError = true; } if(requiredError == false){ jQuery.ajax({ url: webFormAjaxDir + "?FORM_ID=" + formId + "&SITE_ID=" + webFormSiteId + "&WEB_FORM_ID=" + formId , data: formData, cache: false, contentType: false, processData: false, enctype: "multipart/form-data", type: "POST" , dataType: "json", success: function(response){ res = jQuery.parseJSON(response); console.log("Result "+res); //remove error labels $thisFormErrors.empty().removeClass("visible"); $webFormError.empty().removeClass("visible"); if(response["SUCCESS"] != "Y"){ //set errors $.each(response["ERROR"], function(nextId, nextValue){ var $errorItemContainer = $("#WEB_FORM_ITEM_" + nextId); if(nextId != 0 && $errorItemContainer){ $errorItemContainer.find(".webFormItemError").html(nextValue).addClass("visible"); }else{ $webFormError.append(nextValue).addClass("visible"); } }); // reload captcha if(response["CAPTCHA"]){ $webFormCaptchaSid.val(response["CAPTCHA"]["CODE"]); $webFormCaptchaImage.attr("src", response["CAPTCHA"]["PICTURE"]); } }else{ $("#webFormMessage_" + formId).css({ display: "block" }); $thisForm[0].reset(); } //remove loader $thisForm.removeClass("loading"); $submitButton.removeClass("loading"); } }); }else{ if(requiredErrorPosition){ $("html, body").animate({ "scrollTop": requiredErrorPosition - $(window).height() / 2 }, 250); } $thisForm.removeClass("loading"); $submitButton.removeClass("loading"); } return event.preventDefault(); } var removeErrors = function(event){ $(this).removeClass("error"); }; var webFormExit = function(event){ $(".webFormMessage").hide(); return event.preventDefault(); } $(document).on("focus", ".webFormItemField input, .webFormItemField select, .webFormItemField textarea", removeErrors); $(document).on("click", ".webFormMessageExit", webFormExit); $(document).on("submit", ".webFormDw form", sendWebForm); }); |
Это шаблон php для вывода переменной SUCCESS:
Код |
---|
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <? if($arResult["isFormErrors"] == "Y"){ if(!empty($arResult["FORM_ERRORS"])){ $arReturn["ERROR"] = $arResult["FORM_ERRORS"]; } $arReturn["CAPTCHA"] = array( "CODE" => htmlspecialcharsbx($arResult["CAPTCHACode"]), "PICTURE" => "/bitrix/tools/captcha.php?captcha_sid=".htmlspecialcharsbx($arResult["CAPTCHACode"]) ); }else{ $arReturn["SUCCESS"] = "Y"; } echo \Bitrix\Main\Web\Json::encode($arReturn); ?> |