3

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

例如,它对 Drupal 7 的工作:

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

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

4

1 回答 1

1

通过\Drupal\Core\Ajax\InvokeCommand\Drupal\Core\Ajax\AjaxResponse::addCommand().

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

  • 创建一个表格。
  • 在一个::buildForm()使用#ajax渲染元素中。
  • 创建回调。

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

AjaxResponse要调用您自己的 Javascript 函数(如您所愿),您必须使用一个对象进行响应。

这是Drupal 8 上 Ajax 的完整文档


这是示例:

部分::buildForm()与 Ajax 渲染元素的实现:

$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 \Drupal\Core\Ajax\AjaxResponse
 *   Response object.
 */
public function respondToAjax(array &$form, FormStateInterface $form_state) {
  $response = new AjaxResponse();
  $response->addCommand(new InvokeCommand('#example', 'ajaxSuccess'));
  return $response;
}

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

于 2018-06-08T06:00:19.533 回答