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

时间:2018-06-07 23:44:19

标签: javascript ajax drupal drupal-8 drupal-ajax

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

例如,它对Drupal 7的工作:

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

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

1 个答案:

答案 0 :(得分:1)

\Drupal\Core\Ajax\InvokeCommand上使用对象\Drupal\Core\Ajax\AjaxResponse::addCommand()

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

  • 创建表单。
  • ::buildForm()内使用#ajax渲染元素。
  • 创建回调。

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

要根据需要调用自己的Javascript函数,您必须使用AjaxResponse对象进行回复。

这是complete documentation of Ajax on Drupal 8

<小时/> 以下是示例:

部分::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;
}

您可以在此处找到list of all commands you can pass in the response