以编程方式使用Drupal7 AJAX良好

时间:2010-10-28 11:44:40

标签: ajax drupal drupal-7

来自http://drupal.org/node/953016

的X帖子

Drupal 7 AJAX系统非常棒,它可以非常顺利地用于表单甚至链接。

我无法理解如何以理智的方式做到是从javascript调用它。我可能想要一个没有表单的动态页面,并且作为其中一部分进行Drupal ajax调用,特别是在返回时运行ajax命令。

到目前为止,我发现最有效的方法是:

  dummy_link = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>');
  $(vars_div).append(dummy_link);
  Drupal.attachBehaviors(vars_div);
  dummy_link.click();

这是有效的,但是一个巨大的黑客。我没有找到执行ajax调用的方法,并让Drupal ajax框架执行它,而不是标准的jquery框架。

我原本以为可以直接调用drupal ajax api,有谁知道怎么做?

1 个答案:

答案 0 :(得分:7)

简短的简短回答是你想让自己得到类似的东西:

$.ajax(ajax.options);

这是jQuery的一部分,但是有一组选项可以帮助你在成功处理,效果等方面融入Drupal Goodness。这就是你在“巨大的黑客”示例中对你有用的东西。

以编程方式创建一个新的Drupal.ajax函数仍然需要一个合成元素:

base = 'someid'
element = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>');
element_settings = {'url': uri, 'event': 'click'}
myAjax = new Drupal.ajax(base, element, element_settings)

但是你至少可以在不模拟用户界面中点击的情况下触发它:

myAjax.eventResponse(element, 'click')

感觉应该有更好的方法来做到这一点,但它需要另一种方法来设置不需要DOM元素的初始ajax原型。因为交互集的大部分取决于如何将数据移回DOM中,所以我认为这个用例尚未得到很好的支持。

也可以使用一组适当的选项直接转到jQuery并获得你想要的效果,但Drupal.ajax原型函数自我引用相当多,所以没有Drupal.ajax类这样做似乎有点冒险