Как получить доступ к состояниям формы внутри функции обратного вызова ajax
Я работаю над модульным модулем и хотел бы выполнить ajax-операции над его конфигурационными формами, когда файл загружается через поле managed_file.
Поэтому, когда скрытое поле управляемого_файла изменяется (после успешной загрузки файла), выполняется обратный вызов ajax. Аякс называется так:
function updateVideo($action){
(function ($) {
$.ajax({
url: '/block_video/update_video', // drupal menu path
dataType: 'json',
type: 'POST',
data: { 'action' : $action },
success: function(data){
// @ TODO
}
});
})(jQuery);
}
Зарегистрированный выше путь drupal (/block_video/update_video) вызывает функцию, в которой я хотел бы получить переменную $form_state конфигурации блока с ее текущим состоянием (не начальным). Можно ли увидеть текущие состояния формы конфигурации блока без непосредственного использования javascript и без вызова обновления страницы?
Для меня было бы гораздо проще использовать свойство '#ajax' для управляемого_файла, но у него его нет. Поэтому я добавил обратный вызов ajax выше, ожидая изменения значения в скрытом элементе managed_file, и эта часть работает (используя метод, описанный здесь http://forum.jquery.com/topic/adding-a-change-event-on-a-hidden-field).
Я должен быть в состоянии получить $form_state в моем пользовательском обратном вызове ajax. Я хотел бы сделать это так, как это делается с помощью FAPI [#ajax][callback] (оба параметра $ form и $form_state передаются в параметры обратного вызова - мне нужно только, чтобы текущий $form_state был передан моему обратному вызову или получен доступ к нему) Я не могу понять, как это делает Drupal.
Может быть, кто-то может помочь мне случайно...
Благодарю.
1 ответ
Хорошо, я исправил это вскоре после того, как спросил, поэтому вот ответ: я не нашел никакого решения для извлечения form_states вне обратного вызова #ajax, поэтому, когда изменяется состояние скрытого поля, я получаю текущее состояние формы напрямую из чистого jQuery ajax функция.
Не по теме, но вроде как: я управлял другими form_states внутри обычного обратного вызова FAPI #ajax php, мне нужно было вызывать некоторые пользовательские js сразу после этого, так что с помощью метода ниже вы можете вызвать второй обратный вызов ajax или просто функцию. Это сделано так:
// Code inside the FAPI #ajax callback :
// Trigger the function $.fn.ajaxTrigger defined in my js file.
$commands[] = ajax_command_invoke(NULL, 'ajaxTrigger');
return array(
'#type' => 'ajax',
'#commands' => $commands,
);
С помощью этой команды вы можете вызвать любую функцию javascript из обратного вызова Drupal 7 #ajax.