9

来自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,有人知道怎么做吗?

4

1 回答 1

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)

但是您至少可以在不模拟 UI 中的单击的情况下触发它:

myAjax.eventResponse(element, 'click')

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

也可以使用适当的选项集直接进入 jQuery 并获得所需的效果,但是 Drupal.ajax 原型函数自我引用相当多,因此在没有 Drupal.ajax 类的情况下这样做似乎有点冒险。

于 2011-01-29T23:09:11.833 回答