我正在使用块模块,当通过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回调之外的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函数。