如何在ajax回调函数中访问表单状态

时间:2012-03-27 20:32:34

标签: ajax forms drupal callback drupal-7

我正在处理块模块,并希望在通过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是如何完成的。

也许有人可以帮助我......

感谢。

1 个答案:

答案 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函数。