【问题标题】:drupal 8 Calling a JavaScript function after an #AJAX eventdrupal 8 在#AJAX 事件之后调用 JavaScript 函数
【发布时间】:2018-11-17 23:27:47
【问题描述】:

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

例如,它对 Drupal 7 的工作:

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

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

【问题讨论】:

  • 您的#ajax 是表单上的回调吗?您能否添加您自己的 #ajax 实现的 Drupal 8 代码?

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


【解决方案1】:

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

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

【讨论】:

  • 但我不需要编写php代码。我不需要创建表单。在成功挂起 ajax 后,我只想让 JS 处理程序运行。 Drupal 7 我的例子奏效了。我认为 Drupal 8 发生了一些变化。
  • 看来您的问题具有误导性。您应该添加更多信息。例如,which formaction 在 Ajax 调用后您试图“挂钩”这与核心模块或贡献模块有关?
  • 嗯,模块来自核心。用于编辑用户配置文件的表单。添加用户的图片。我希望,当图片被加载(或删除)时,这只是一个 Ajax 表单。我的 js 代码应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
相关资源
最近更新 更多