14ответ(ов) в теме
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
1
21:15
Версия WP-Recall: 16.18.10

Здравствуйте. Подскажите пожалуйста как правильно сделать submit формы профиля из jQuery?
У меня свой обработчик на стандартной кнопке обновления профиля, и если я делаю простой сабмит:
$('#your-profile').submit();
то поля не сохраняются в базе. Я так понял там в POST должен передаваться параметр "submit_user_profile", который проверяется в файле /wp-recall/add-on/profile/index.php и у меня он соответственно не передается при обычном сабмите. Вроде как в форме должно быть скрытое поле для проверки (как в инструкции вот тут:

Вы не можете просматривать опубликованные ссылки

), но я его не нахожу. Подскажите как можно выйти из ситуации. Заранее спасибо.

0
Андрей CS
не в сети 2 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
2
08:50

при сабмите вызывайте js-функцию rcl_check_profile_form(); она примет и сохранить все данные

0
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
3
09:53

Если вот так:
$('#your-profile').on('submit', function(event) {
rcl_check_profile_form();
});

Тоже не сохраняет. Эта функция проверяет обязательные поля и возвращает true я так понял? Или она еще как раз в POST передает нужный параметр и редиректит страницу?

0
Андрей CS
не в сети 2 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
4
10:22

пардон, эта функция не подойдет.
submit_user_profile передается из самой кнопки с типом submit, т.е. она должна иметь атрибут name такой

0
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
5
10:44

Да, эта кнопка осталась, и name у нее "submit_user_profile". Но я перехватываю событие click на этой кнопке и ставлю ей event.preventDefault();
Далее делаю свои манипуляции и после хочу отправить форму. Делаю форме сабмит вручную из JS, но видимо этого недостаточно, раз данные не сохраняются, в переменной POST нет параметра "submit_user_profile". Форма сабмитится, но без редиректа и без записи данных.

0
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
6
10:48

Вот мой обработчик. По сути это перехват отправки и проверка моих полей, в зависимости от значения которых форма должна либо сразу отправляться, либо выводить всплывающее окно и не отправляться.

$('#cpsubmit').on('click', function(event) {
    event.preventDefault();
    var check_form = rcl_check_profile_form();

    console.log('Сохраняем данные... ')
    var city = $('#user_field_city').val();
    var category = $('#user_field_category').val();

  // Проверяем обязательные поля
  if ( check_form ) {
  // Если есть значения в полях города и категории...
  if ( city && category ) {

    $.ajax({
      url: myajax.url,
      type: 'POST',
      data: 'action=busy_category&city=' + city + '&category=' + category + '',
      beforeSend: function( xhr ) {
           $('#cpsubmit').addClass('button-wait');  
        }
      })
    .done(function(data) {
      console.log(data);
      var user_data = JSON.parse(data);

      // Если категория свободна 
      if ( user_data.is_free ) {
        // Обновлем профиль
        $('#your-profile').submit();
      }
        // Если категория занята, то
        else {
          // Проверяем что это категория не пользователя и выводим окно о занятости категории с уведолением на почту
          if ( !user_data.current_user ) {
            $.magnificPopup.open({
              items: {
                src: '#busy-srvice-popup',
                type: 'inline'
              }
            });
          }
          // Если это категория пользователя (оплаченная), то обновляем профиль
          else {
            $('#your-profile').submit();
          }
        }
      })
    .fail(function() {
      console.log("error");
    })
    .always(function() {
      $('#cpsubmit').removeClass('button-wait');
      console.log("complete");
    });
  }
  // Если нет значений в полях города и категории (заблокированы у оплаченных), тогда просто обновляем профиль
  else {
    $('#your-profile').submit();
  }
}  
}); 

Редакции сообщения
17.04.2020 10:57Дружаев Владимир (Otshelnik-Fm)Причина: есть кнопка многострочный код
0
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
7
10:50

Если сабмитить форму с кнопки (без обработчика) - все сохраняется нормально. Вручную, через submit формы - нет.

0
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
8
10:53

Да же если просто написать:

$('#cpsubmit').on('click', function(event) {
  event.preventDefault();
  $('#your-profile').submit();
}

Данные не сохраняются 🙁

Редакции сообщения
17.04.2020 10:57Дружаев Владимир (Otshelnik-Fm)Причина: есть кнопка многострочный код
0
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
9
11:05

Кажется нашел в коде плагина, как сабмитится форма. Для проверки при сабмите должно генерироваться скрытое поле input type="hidden" с именем ключа и value каким-нибудь... Сейчас проверю

0
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
10
11:10

ДА! Все так и есть. Работает. Сохраняет. Вопрос решен. Спасибо за ответы.

0
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
11
11:18

Еще такой вопрос. А можно как-нибудь сделать генерацию скрытого инпута не из JS для безопасности? Может есть какой-то более правильный способ? Я его генерирую в своем обработчике на событии submit формы.

0
Андрей CS
не в сети 2 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
12
11:21

можно через фильтр profile_options_rcl

0
Kort Vagner
не в сети 4 года
На сайте с 29.04.2015
Участник
Тем 6
Сообщения 27
13
12:20

Спасибо, попробую

0
Вова (Otshelnik-Fm)
не в сети 16 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
14
14:34

Kort Vagner сказал(а)
Вопрос решен.

По новому вопросу создавайте новую тему.

0
Тема закрыта. Публикация новых сообщений запрещена.