Drupal7-挂钩Ajax事件和视图刷新

时间:2020-03-05 15:25:33  来源:igfitidea点击:

Drupal有一个稳定的Ajax接口,我们可以在不同的地方钩住Ajax事件。
我将解释5种重要的方法,

  1. beforeSerialize-在打包数据并在beforeSend和beforeSubmit之前运行之前调用

  2. beforesmit-在ajax请求之前调用

  3. beforeSend-在ajax请求之前调用

  4. success-在ajax事件返回数据后调用

  5. complete—在请求结束后调用

假设我们想要捕获一些ajax事件(内置的或者由其他模块生成的)来执行一些事件,比如视图刷新。
我们可以用一个非常简单的逻辑来实现。

(function($) {
    Drupal.behaviors.timetracker = {
        attach: function(context, settings) {
        /*Task submit ajax*/
        for (ajax_el in settings.ajax) {    
          if (Drupal.ajax[ajax_el].element.form) {
             if (Drupal.ajax[ajax_el].element.form.id === 'TYPE-node-form') {
               //called before the ajax request
               Drupal.ajax[ajax_el].beforeSubmit = function(form_values, element_settings, options) {
               //Do something                      
               }
               Drupal.ajax[ajax_el].beforeSend = function (xmlhttprequest, options) {
                //Do something                      
              }
              //called before data is packed
              Drupal.ajax[ajax_el].beforeSerialize = function(element_settings, options) {
               //Do something     
              }              
             //Called after ajax event returns data
              Drupal.ajax[ajax_el].success = function(response, status) {
                 //Trigger views refresh refresh the activity view
                 $('.view-id-activity').trigger('RefreshView');
                 //Pass back to original method
                 Drupal.ajax.prototype.success.call(this, response, status);
             }
             Drupal.ajax[ajax_el].complete = function(response, status) {
            }
       }
      }
    }
  }
}
});

在我的例子中,我得到了为Ajax处理设置的所有表单,并将它们与我的节点表单进行比较。
一旦表单提交并返回ajax数据,就会调用"success"方法。
随着新数据的添加,我在这里使用内置的Drupal过程刷新相应的视图以刷新视图。
注意,我使用Drupal.ajax.prototype原型.成功。
调用确保核心函数在最后运行,否则我们可能会注意到不一致。