2012-03-27 103 views
0

我正在處理一個塊模塊,並希望在通過managed_file字段上傳文件時對其配置表單執行ajax操作。如何訪問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); 
} 

上述(/ block_video/update_video)註冊Drupal的路徑調用一個函數,其中我想與它的當前狀態檢索塊配置$ form_state變量(未初始)。是否有可能直接看到當前塊配置表單狀態而不直接使用JavaScript,也沒有調用頁面刷新?

對於我來說,在managed_file上使用'#ajax'屬性會更簡單,但它沒有它。所以我通過在managed_file隱藏元素上等待值更改並且該部分正在工作(使用在此描述的方法http://forum.jquery.com/topic/adding-a-change-event-on-a-hidden-field)來添加上面的ajax回調。

我應該能夠在我的自定義ajax回調中檢索$ form_state。我想這樣做與FAPI [#ajax] [回調]完成($ form & $ form_state傳遞給回調參數 - 我只需要傳遞給我的回調或訪問它的當前$ form_state) ,我無法確定Drupal是如何完成的。

也許有人可以幫我碰巧...

謝謝。

回答

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函數。

相關問題