我正在处理块模块,并希望在通过managed_file字段上传文件时在其配置表单上执行ajax操作。
因此,当managed_file隐藏字段更改时(一旦文件成功上载),就会有一个ajax回调。 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变量及其当前状态(非初始化)。是否可以直接查看当前块配置表单状态而无需调用页面刷新?
对于我来说,在managed_file上使用'#ajax'属性会更简单,但它没有它。所以我通过等待managed_file隐藏元素的值更改来添加上面的ajax回调,这部分正在工作(使用此处描述的方法http://forum.jquery.com/topic/adding-a-change-event-on-a-hidden-field)。
我应该能够在自定义ajax回调中检索$ form_state。我想用FAPI [#ajax] [callback]完成的方式($ form& $ form_state都传递给回调参数 - 我只需要将当前的$ form_state传递给我的回调或在其中访问),我无法想象Drupal是如何完成的。
也许有人可以帮助我......
感谢。
答案 0 :(得分:0)
好吧,我在问这个问题后很快就修好了答案: 我没有找到任何解决方法来检索#ajax回调之外的form_states,所以当隐藏字段状态改变时,我直接从纯jQuery ajax函数获取当前表单状态。
关闭主题但有点相关:我在通常的FAPI #ajax php回调中管理了其他form_states,我需要在之后调用一些自定义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,
);
使用此命令,您可以从Drupal 7 #ajax回调中调用任何javascript函数。