Предупреждать о сообщении после обратного вызова ajax


Я хотел бы реализовать что-то вроде второго примера по этой ссылке, но не при отправке формы, а на самом деле при нажатии переключателя. (нажмите, чтобы предупредить) http://d7.drupalexamples.info/examples/ajax_example/advanced_commands . С помощью приведенного ниже кода мне удалось предупредить сообщение, но после этого форма не работает должным образом, после отправки она перенаправляет меня на $base_url/system/ajax и отображается массив json.

$form['submitted']['test']['#ajax'] = array
        (
           'callback' => '_test',
           'wrapper' => 'nimportequi',
           'progress' => array('type' => 'throbber', 'message' => '')
        );

И обратный вызов:

function _test($form, $form_state){
    $commands = array();
     $text = "";
     $alert = 0;
     if (valid_email_address($form['submitted']['email']['#value']) !== FALSE)
     {
        $result = user_load_by_mail($form['submitted']['email']['#value']);
        $text = ($result !== FALSE)?$alert=1:"Based on your email, you are not a member yet!";
     }
     else 
        $text = "Based on your email, you are not a member!";
     if ($alert != 1 && $form_state['values']['submitted']['member'] == 1)
     {
        $commands[]=ajax_command_alert($text);
       // $commands[] = ajax_command_data("#foo", 'label_radio', '1');
     }
     $form_state['rebuild'] == TRUE;
     return array('#type' => 'ajax', '#commands' => $commands);
}

Также я использую правило при отправке формы. Что я делаю не так? Я не могу этого понять...

 2
Author: Gaelan, 2013-01-23

3 answers

Добавьте обратный вызов ajax в кнопку отправки формы следующим образом:

Редактировать

$form['radio_buttons']['#ajax'] = array (
  'callback' => '_test',
  'wrapper' => 'nimportequi',
  'event' => 'change',
  'progress' => array('type' => 'throbber', 'message' => ''),
);

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

Ваш обратный вызов ajax кажется нормальным.

 3
Author: subhojit777, 2013-01-25 10:05:13

Вам нужно установить "#ajax" в элементе формы "выбрать", а не "отправить".

Например.

$form['myselect'] = array(
  '#type' => 'select',
  '#options' => array(1, 2),
  '#ajax' => array(
    'callback' => '_test',
    'event' => 'change',
  ),
);

function _test($form, $form_state) {
  $commands = array();
  $commands[]=ajax_command_alert('testing');
  return array('#type' => 'ajax', '#commands' => $commands);
}
 0
Author: 2pha, 2013-01-25 13:45:35

Проблема заключалась в том, что мне позвонили, например:

$form['#action'] = $_SERVER['REQUEST_URI'];

И это привело к тому, что после второй отправки переменная примет значение:

$form['#action'] = 'system/ajax';

Изменение этого для исправления поведения решило мою проблему, как показано ниже.

 if (!isset($form_state['values']))
    $form['#action'] = $_SERVER['REQUEST_URI'];
else
    $form['#action'] = $custom_url;
 0
Author: Vlasin, 2013-02-01 10:34:10