Drupal7-挂钩Ajax事件和视图刷新
时间:2020-03-05 15:25:33 来源:igfitidea点击:
Drupal有一个稳定的Ajax接口,我们可以在不同的地方钩住Ajax事件。
我将解释5种重要的方法,
beforeSerialize-在打包数据并在beforeSend和beforeSubmit之前运行之前调用
beforesmit-在ajax请求之前调用
beforeSend-在ajax请求之前调用
success-在ajax事件返回数据后调用
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原型.成功。
调用确保核心函数在最后运行,否则我们可能会注意到不一致。