首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从当前AJAX请求获取和应用当前页面查询参数

如何从当前AJAX请求获取和应用当前页面查询参数
EN

Drupal用户
提问于 2019-05-09 18:33:14
回答 2查看 2.2K关注 0票数 0

我很难弄清楚该怎么做。

本质上,我有一个表,显示页面上的用户。该表使用PagerExtender分页,并使用TableSortExtender进行排序。

每个用户行都有带有"use- AJAX“类的链接;这些链接对用户执行操作,然后在执行这些操作后重建当前表--这都发生在AJAX中。

我遇到的问题是,当我在AJAX中重新构建表时,当前的请求是对AJAX操作的请求,而不是构建此页面的请求。这意味着当通过AJAX重新构建表时,寻呼机和排序设置将丢失,您将被重置为第一页,没有任何排序。

我在某个地方找到了一些代码来提取前一个请求,并获取URL和参数,但我不知道这有多可靠,也不知道如何实现它:

代码语言:javascript
复制
$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());

上述问题是:

  1. 我不知道HTTP_REFERER有多可靠
  2. 我不知道如何将前一个页面请求参数添加到当前请求中,以便正确地重建表
  3. 如果前面的请求不是构建表/页的请求,那么我再次陷入困境

解决方案总是在我发出的每个AJAX请求中传递前一个请求URL和Params吗?我觉得someone已经在某个地方解决了这个问题,或者某种程度上解决了,但是我只是在Drupal 8中的这个领域迷路了,并且一直在绞尽脑汁想办法在AJAX请求中刷新页面的各个部分。

编辑:我不确定放置“已完成”代码的最佳位置,但感谢4k4,我将以下内容放在一起:

代码语言:javascript
复制
  // 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);
EN

回答 2

Drupal用户

回答已采纳

发布于 2019-05-09 21:06:35

不,HTTP_REFERER不可靠,是的,解决方案是将当前请求的查询参数添加到每个AJAX链接中。Form API对form元素也是这样:

RenderElement::preRenderAjaxForm

代码语言:javascript
复制
    // 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();
票数 2
EN

Drupal用户

发布于 2022-05-30 08:46:56

这在Drupal 9.3中适用于我:

代码语言:javascript
复制
#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);
  }
});

在控制器文件中:

代码语言:javascript
复制
$nid = \Drupal::request()->get('nid');
票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/280978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档