AJAX Forms

Главные вкладки

Аватар пользователя molfarr molfarr 9 марта 2012 в 18:51

Доброго времени суток, товарищи эксперты. Изучаю AJAX Forms, в качестве учебного примера создал опросник(3 элемента формы "#type" => 'radios' и 1 submit) ничего сверхъестественного. На submit прицепил
'#ajax' => array(
'method' => 'replace',
'callback' => 'quest_form_ajax_callback',
'wrapper' => 'quest'
),
Описал callback-функцию.

callback-функция прекрасно отрабатывает, возвращает нужный мне результат, но вот замещать форму этим самым результатом не торопится. Хотя это, как я понял, должно произойти если выставить 'method' => 'replace', а в качестве врапера указать тот, в котором находится форма.
Подскажите, пожалуйста, что я упускаю?

ВложениеРазмер
Двоичные данные questionnaire.module769 байт
Иконка изображения return.png14.02 КБ
Иконка пакета questionnaire.zip8.91 КБ

Комментарии

Аватар пользователя eLSe eLSe 9 марта 2012 в 19:26

Приведите полный листинг кода. А вообще у меня была сходная ситуация, когда изменения в формепыталась сделать в колбэк-функции. Колбэк должен вернуть лишь тот элемент массива формы, который был изменен (ну или всю форму) . Изменения формы должны происходить в _form_alter ().
Пример тут http://drupal.org/node/752056

Аватар пользователя molfarr molfarr 9 марта 2012 в 19:53

Прикрепил текст модуля в ОЧЕНЬ упрощенном виде, чтоб не отвлекаться на посторонние моменты, а так же изображение с возвращаемым результатом(По этому поводу тоже вопрос. Такой и должен возвращаться результат от callback'a?)

Аватар пользователя eLSe eLSe 9 марта 2012 в 20:04

don't have permission to access /files/questionnaire.module on this server. Sad а по поводу результата колбэка - да, оно примерно так и выглядит.

Аватар пользователя ser_house ser_house 9 марта 2012 в 22:25
<?php
$output 
.= '<div calss = "questionnaire">';
?>

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

<?php
if (isset($form_state['triggering_element']))
?>

если выполняется — строим вторую форму по данным $form_state (запрос, получение результа),
если нет — строим первую, для указания параметров.

Функция обратного вызова ajax

<?php
function questionnaire_from_ajax_callback($form$form_state) {
  return 
$form;
}
?>

Учтите, по срабатыванию события вызывается функция построения формы (это, наверное, самый сложный момент в понимании AJAX), а не коллбэк. Коллбэк только указывает нужную для замены часть формы (ajax_commands — немного другое дело).

ЗЫ. И с использованием темизации разобраться лучше