Предупреждать о сообщении после обратного вызова 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);
}
Также я использую правило при отправке формы. Что я делаю не так? Я не могу этого понять...
3 answers
Добавьте обратный вызов ajax в кнопку отправки формы следующим образом:
Редактировать
$form['radio_buttons']['#ajax'] = array (
'callback' => '_test',
'wrapper' => 'nimportequi',
'event' => 'change',
'progress' => array('type' => 'throbber', 'message' => ''),
);
Это гарантирует, что при нажатии переключателя будет выполнен обратный вызов ajax. Выбор переключателей выдаст предупреждающее сообщение, поэтому к переключателям следует применить обратный вызов ajax.
Ваш обратный вызов ajax кажется нормальным.
Вам нужно установить "#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);
}
Проблема заключалась в том, что мне позвонили, например:
$form['#action'] = $_SERVER['REQUEST_URI'];
И это привело к тому, что после второй отправки переменная примет значение:
$form['#action'] = 'system/ajax';
Изменение этого для исправления поведения решило мою проблему, как показано ниже.
if (!isset($form_state['values']))
$form['#action'] = $_SERVER['REQUEST_URI'];
else
$form['#action'] = $custom_url;