Категория:
Опубликовано:

Как очистить форму отправленную AJAX'ом

Очень просто. ))

Ниже, построим форму, назначим ей отправку AJAX'ом и очистим все поля после сабмита.

Альтернативный способ, с использованием AJAX-commands.

Строим форму:

/**
 * My sample form
 */
function mymodule_form($form, &$form_state) {
  $form['#clean_id'] = drupal_clean_css_identifier(__FUNCTION__) . '-wrapper';
  $form['#prefix'] = '<div id="' . $form['#clean_id'] . '">';
  $form['#suffix'] = '</div>';

  $form['name'] = array(
    '#type'       => 'textfield',
    '#title'      => t('Name'),
    '#required'   => TRUE,
    '#attributes' => array(
      'placeholder' => t('Your name'),
    ),
  );

  $form['actions'] = array(
    '#type' => 'actions',
  );

  $form['actions']['submit'] = array(
    '#type'  => 'submit',
    '#value' => t('Submit'),
    '#ajax'  => array(
      'callback' => 'mymodule_form_ajax_callback',
      'wrapper'  => $form['#clean_id'],
      'event'    => 'click',
    ),
  );

  return $form;
}

В AJAX-коллбеке реализуем следующую конструкцию:

/**
 * My sample form callback.
 */
function mymodule_form_ajax_callback($form, $form_state) {
  if (form_get_errors()) {
    // Возвращаем при наличии ошибок
    return $form;
  }
  else {
    // Выводим сообщеньку, если нужно
    drupal_set_message(t('Thank You!'));

    // Смотрим кеш чистой формы
    $form = form_get_cache($form_state['input']['form_build_id'], $form_state);

    // Сбрасываем заполненные значения
    $form_state['input'] = array();

    // Грузим и возвращаем форму
    return form_builder($form['#form_id'], $form, $form_state);
  }
}

После отправки, форма будет очищена.

Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.