Здравствуйте, уважаемые посетители форума!
Очень прошу Вас помочь с неприятной ситуацией с формами.
Я использую сервис 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);
?> |