Как в сниппете получить значения полей из AjaxForm?

Здравствуйте!

Необходимо работать со сторонней базой данных через форму. Например, по никнейму и паролю, введенным в форму, вывести ID строки таблицы с этим никнеймом и паролем.
Возможно, ответ на такой вопрос уже есть, однако, я не нашел ничего подходящего… Заранее извиняюсь. Готов ловить тапки.

Вызов формы на странице выглядит так:
[[!AjaxForm? 
    &form=`get_id_form` 
    &snippet=`getId`
]]
Чанк c формой:
<form class="form-horizontal">
  <div class="form-group">
    <label for="name" class="col-md-1 control-label">Ник:</label>
    <div class="col-md-5">
      <input type="text" class="form-control" id="name" name="name" value="[[+fi.name]]" placeholder="">
    </div>
  </div>
  <div class="form-group">
    <label for="pass" class="col-md-1 control-label">Пароль:</label>
    <div class="col-md-5">
      <input type="password" class="form-control" id="pass" name="pass" value="[[+fi.pass]]" placeholder="">
    </div>
  </div>
  <div class="form-group">
    <div class="col-md-offset-1 col-md-5">
      <button type="submit" class="btn btn-default" name="submit">Получить ID</button>
    </div>
  </div>
</form>
Сниппет пока стандартный:
<?php
    if (empty($_POST['name'])) {
        return $AjaxForm->error('Ошибки в форме', array(
            'name' => 'Вы не заполнили имя'
        ));
    }
    else {
        return $AjaxForm->success('Форма прошла проверку');
    }
Он вроде работает, на пустое поле name ругается, с заполненным — показывает сообщение, что форма в порядке. Но я не могу получить значение $_POST['name']. Если перед return добавляю строку типа
print $_POST['name'];
, то при нажатии на кнопку «Получить ID» последняя становится неактивной, а курсор поверх формы приобретает вид перечеркнутого красного круга. Форма как бы зависает. В консоль при этом ничего не выводится.
Это первый вопрос. А второй — как вывести результат работы сниппета (полученный из запроса ID) на страницу? Где-нибудь под формой. Через событие af_complete?
Сергей
06 февраля 2020, 15:39
modx.pro
833
0

Комментарии: 3

Сергей
07 февраля 2020, 16:44
0
Более того, форма «зависает», если вызывать print или echo с любыми параметрами. Например, если перед return вписать echo 'blablabla', зависнет. Да и вообще зависает при добавлении любой строки…
    Николай Савин
    07 февраля 2020, 19:15
    +1
    В таких скриптах не нужно писать никаких echo и print. Это ж аякс.
    Для начала если хотите проверить поступление данных или что то залогировать используйте $modx->log();
    Примеры
    $modx->log(1, print_r($_POST, 1));
    $modx->log(1, $_POST['name']);
    AjaxForm не особо то предназначен для возврата значений. Его основная цель захватить данные формы и куда то отправить. Чтобы манипулировать возвращенными данными нужно переписывать скрипт js ajaxForm, добавляя свою логику
      Сергей
      07 февраля 2020, 23:26
      0
      Николай, спасибо!
      По Вашему совету прологировал всё, что можно) В итоге конкретно эта задача решилась. ID из сниппета возвращал вместо success:
      return $row['ID'];
      А потом ловил событие af_complete и выводил response на страничку. Но это работает, только когда response — число, со строками так не прокатывает… А надо бы…

      Может быть, натолкнете на правильный путь, как поступить? Писать форму и обработчик целиком в сниппете? Или есть какие-то готовые решения? Цель — получить из формы значения полей, создать из них запрос в БД, ответ вывести на странице.
      Заранее спасибо!
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3