sorry_i_noob
@sorry_i_noob

Лучший способ избежать дублирования кода для изменения AJAX формы при ее отправке (запрет на ввод, запрет на нажатие кнопки «Отправить»...)?

Здравствуйте. Подскажите, пожалуйста, лучший способ избежать дублирования кода для изменения AJAX формы при ее отправке и отмены этих изменений - после отправки.
У меня много AJAX форм. При отправке такой формы нужно сделть запрет на повторную отправку, на ввод символов и т.д. - до тех пор, пока не придет ответ с сервера. Что я делаю сейчас. Я написал функцию, куда передается отправляемая форма. В ней происходит поиск кнопки для отправки и ставится блокировка, форме добавляется класс (чтобы нельзя было ее отправить другими способами), вешается блокировка на поля для ввода. После прихода ответа с сервера вызывается другая функция, обратная этой - чтобы отменить блокировку, убрать класс и т.д. Но получается, что в каждой функции для отправки AJAX формы я должен дублировать две строчки - для вызова функции блокировки и для вызова функции отмены блокировки. А у меня, как я уже писал, AJAX форм много. Да и как-то примитивно выглядит этот подход.
Можно ли написать данную схему лучше? Например, у всех похожих AJAX форм есть определенный класс. На отправку формы с таким классом вешается обработчик, в котором происходит блокировка ее полей и возможности отправки. Далее вызывается функция, собственно, отправки на сервер и приема ответа с сервера с применением информации, которая пришла (AJAX функция. Которая зависит от того, какая форма отправляется. Например, атрибут data-func с названием функции для отправляемой формы).
Вот как сделать ожидание ответа с сервера? По сути, это ожидание выполнения AJAX.
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ответы на вопрос 1
$(form).submit(function(){
 var that = $(this);
  var url = that .attr('action');
  var method = that .attr('method');
  $.ajax({
   type: method,
   url: url,
   data: that .serialize(),
   beforesend: function(){
   that.attr('disabled','true');
   },
  success: function(){

  },
  complete: function(){
   that.attr('disabled','false');
  }
  });
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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