drupal 8 在 #AJAX 事件后调用 JavaScript 函数



我希望js脚本在执行ajax操作后运行。

例如,它在Drupal 7上的工作:

Drupal.behaviors.events = {
attach: function(context, settings) {
$('#example').bind('ajaxSuccess', function(data, status, xhr) {
>>code here<<
});
}
};

如何为 Drupal 8 编写一个成功的脚本?

通过在DrupalCoreAjaxAjaxResponse::addCommand()上使用对象DrupalCoreAjaxInvokeCommand

Ajax 可以与表单一起使用来提供各种东西。典型的步骤涉及:

  • 创建表单。
  • ::buildForm()中使用#ajax呈现元素。
  • 创建回调。

有两种方法可以响应 ajax 请求。您可以使用AjaxResponse对象或 HTML 进行响应,以替换可能是原始 HTML 或呈现数组的元素。

要调用你自己的Javascript函数 - 如你所愿 - 你必须使用AjaxResponse对象进行响应。

这是 Drupal 8 上 Ajax 的完整文档。


下面是示例: 对Ajax 渲染元素实现的部分::buildForm()

$form['submit'] = [
'#type'        => 'submit',
'#value'       => $this->t('Send'),
'#ajax'        => [
'callback' => [$this, 'respondToAjax'],
]
];

下面是 Ajax 回调方法,形式相同:

/**
* @param array $form
*   Form API array structure.
* @param array $form_state
*   Form state information.
*
* @return DrupalCoreAjaxAjaxResponse
*   Response object.
*/
public function respondToAjax(array &$form, FormStateInterface $form_state) {
$response = new AjaxResponse();
$response->addCommand(new InvokeCommand('#example', 'ajaxSuccess'));
return $response;
}

您可以在此处找到可以在响应中传递的所有命令的列表。

最新更新