我很难弄清楚该怎么做。
本质上,我有一个表,显示页面上的用户。该表使用PagerExtender分页,并使用TableSortExtender进行排序。
每个用户行都有带有"use- AJAX“类的链接;这些链接对用户执行操作,然后在执行这些操作后重建当前表--这都发生在AJAX中。
我遇到的问题是,当我在AJAX中重新构建表时,当前的请求是对AJAX操作的请求,而不是构建此页面的请求。这意味着当通过AJAX重新构建表时,寻呼机和排序设置将丢失,您将被重置为第一页,没有任何排序。
我在某个地方找到了一些代码来提取前一个请求,并获取URL和参数,但我不知道这有多可靠,也不知道如何实现它:
$current_request = \Drupal::request();
$previous_url = $current_request->server->get('HTTP_REFERER');
$previous_request = Request::create($previous_url);
// $url_object is a Url with the previous page paramters and URL
$url_object = \Drupal::service('path.validator')->getUrlIfValid($previous_request->getRequestUri());上述问题是:
解决方案总是在我发出的每个AJAX请求中传递前一个请求URL和Params吗?我觉得someone已经在某个地方解决了这个问题,或者某种程度上解决了,但是我只是在Drupal 8中的这个领域迷路了,并且一直在绞尽脑汁想办法在AJAX请求中刷新页面的各个部分。
编辑:我不确定放置“已完成”代码的最佳位置,但感谢4k4,我将以下内容放在一起:
// create url object from route to render link
$my_url = Url::fromRoute('my_module.my_route', array('param' => $value));
// get the current query parameters for our page
$query_options = \Drupal::request()->query->all();
// add them to our Url
$my_url->setOption('query', $query_options);发布于 2019-05-09 21:06:35
不,HTTP_REFERER不可靠,是的,解决方案是将当前请求的查询参数添加到每个AJAX链接中。Form API对form元素也是这样:
RenderElement::preRenderAjaxForm:
// Add all the current query parameters in order to ensure that we build
// the same form on the AJAX POST requests. For example,
// \Drupal\user\AccountForm takes query parameters into account in order
// to hide the password field dynamically.
$settings['options']['query'] += \Drupal::request()->query->all();发布于 2022-05-30 08:46:56
这在Drupal 9.3中适用于我:
#ajax request body
$.ajax({
url: Drupal.url('ajax-load-more'),
type: 'post',
data: { nid : drupalSettings.webform.dialog.entity_id },
success: function (res) {
console.log(res);
}
});在控制器文件中:
$nid = \Drupal::request()->get('nid');https://drupal.stackexchange.com/questions/280978
复制相似问题