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

问题描述 投票:0回答:1

我正在使用块模块,当通过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个回答
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函数。

© www.soinside.com 2019 - 2024. All rights reserved.