我希望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;
}
您可以在此处找到可以在响应中传递的所有命令的列表。