tripcollor
@tripcollor

Сработает ли трюк динамической подставки .url в ajax отправке письма?

Нужно чтобы в зависимости от id формы в скрипте ajax направлял на тот или иной обработчик формы php. Соответственно планируется чтобы файлы php бытли таково же названия как и id форм.
Вот что получилось. Прокатит или нет такой вариант?

$("#calcForm, #bottomForm").submit(function () {
    // Получение ID формы
    var formID = $(this).attr('id');
    var formUrl = $(formID + '.php');
    // Добавление решётки к имени ID
    var formNm = $('#' + formID);
    $.ajax({
        type: "POST",
        url: formUrl.,
        data: formNm.serialize(),
        success: function () {
            // Вывод текста результата отправки
          $(".overflow-popup").css("display", "flex").hide().fadeIn().addClass("overflow-show");
          $(".popup-thanks").css("display", "flex").hide().fadeIn().addClass("popup-show");
        },
        error: function () {



          $(".overflow-popup").css("display", "flex").hide().fadeIn().addClass("overflow-show");
          $(".popup-error").css("display", "flex").hide().fadeIn().addClass("popup-show-err");
        }
    });
    return false;
  });
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
ShadowOfCasper
@ShadowOfCasper
Middle User Interface Web Developer
Во-первых, при добавлении каждой новой формы ты будешь открывать скрипт и кидать в $() новый идентификатор. Удобно?
Во-вторых ^*%^$^*&WTF - ты серьёзно решил для каждой формы писать отдельный php? Ну флаг в руки конешн...
В-треьих, тебе бы валидацию добавить, раз уж по сабмиту аяксишь, перед аяксом валидируй правильность заполнения полей, установи защиту от спама....

Как пример кину тебе небольшой скрипт ajax, который я применял в последнем проекте для валидации отправки номеров телефонов и мыл. Скрипт написан с учётом того что форм на странице может быть много.

var ajaxFastForms = function (){
    var moduleName = 'fastform';
    var fastform = $('.'+moduleName+':not(.'+moduleName+'--calltracker)');
    fastform.submit(function(e){
        e.preventDefault();
        var thisForm = $(this),
        thisSubmitter = thisForm.find('.'+moduleName+'__submit'),
        thisField = thisForm.find('.'+moduleName+'__input'),
        thisFieldValue = thisField.val(),
        thisFieldSpamValue = thisForm.find('.'+moduleName+'__spamkiller').val();
        
        if(thisFieldSpamValue === ''){
            //если скрытое поле пусто
            if(thisFieldValue != ''){ //если форма воода заполнена
                var regNumber = new RegExp("^[0-9]{11}");
                var regMail = new RegExp("^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$");
                if( regMail.test(thisFieldValue) || regNumber.test(thisFieldValue)){
                    //если проходит тесты паттернов

                    var url = (typeof thisForm.attr("action") == 'undefined') ? "[[~[[*id]]]]" : thisForm.attr("action"); //берём урлу страницы, если таковая есть в action

                    //формируем запрос к серверу
                    $.ajax({
                        url: url,
                        type: 'POST',
                        data: thisForm.serialize(),
                        success: function(response){
                            notie.alert(1,'Форма успешно отправлена. Наши менеджеры свяжутся с вами в ближайшее время', 4);
                        }
                    }).fail(function(error){
                        console.log(error);
                        notie.alert(3, 'Возникла ошибка на сервере<br> Очистите кэш браузера,  перезагрузите страницу и попробуйте снова', 5);
                    });


                }else{//если не проходит тесты паттернов
                    notie.alert(2,'В форме содержатся ошибки.Проверьте правильность заполнения полей:<br> вводите номер только цифрами, например 89991112233',5);
                }
            }else{
                //если Форма ввода не заполнена
                notie.alert(2,'Форма ввода не заполнена',2.5);
            };

        }else{
            //если скрытое поле заполнено
            notie.alert(3,'Валидация на СПАМ не пройдена.<br>Перезагрузите страницу и попробуйте снова',2.5);
        };
    });
}
module.exports = ajaxFastForms;

Тут на самом то деле не всё гладко. Можно было switch case заюзать. Но я плохо с ними знаком
UPD
Там url может показаться странным - [[~[[*id]]]] - это ссылка на текущий документ в MODX. Просто backend на MODX и писал под него. На странице вызывается плагин отправки FormIt, следовательно и скрипт находится в моём случае по текущему адресу. В твоём случае лучше всего будет писать url php-скрипта в action формы и подхватывать его в url функции ajax.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы