【问题标题】:How to access form states inside an ajax callback function如何在 ajax 回调函数中访问表单状态
【发布时间】:2012-03-27 20:32:34
【问题描述】:

我正在开发一个块模块,并希望在通过 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变量及其当前状态(不是初始状态)。是否可以在不直接使用javascript且不调用页面刷新的情况下查看当前的块配置表单状态?

对我来说,只使用 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 是如何做到的。

【问题讨论】:

    标签: ajax forms drupal callback drupal-7


    【解决方案1】:

    好的,我问了之后很快就修好了,所以这里是答案: 在#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 函数。

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 2012-06-12
      相关资源
      最近更新 更多