diff --git a/core/modules/views/js/ajax_view.js b/core/modules/views/js/ajax_view.js index c76e7073f5..c02da1d5e5 100644 --- a/core/modules/views/js/ajax_view.js +++ b/core/modules/views/js/ajax_view.js @@ -90,7 +90,6 @@ this.element_settings = { url: ajaxPath + queryString, submit: settings, - httpMethod: 'GET', setClick: true, event: 'click', selector, @@ -128,7 +127,6 @@ const selfSettings = $.extend({}, this.element_settings, { event: 'RefreshView', base: this.selector, - httpMethod: 'GET', element: this.$view.get(0), }); this.refreshViewAjax = Drupal.ajax(selfSettings); @@ -203,7 +201,6 @@ submit: viewData, base: false, element: link, - httpMethod: 'GET', }); this.pagerAjax = Drupal.ajax(selfSettings); }; diff --git a/core/modules/views/src/Controller/ViewAjaxController.php b/core/modules/views/src/Controller/ViewAjaxController.php index 54310f68df..941e843bcf 100644 --- a/core/modules/views/src/Controller/ViewAjaxController.php +++ b/core/modules/views/src/Controller/ViewAjaxController.php @@ -11,6 +11,8 @@ use Drupal\Core\EventSubscriber\MainContentViewSubscriber; use Drupal\Core\Form\FormBuilderInterface; use Drupal\Core\Path\CurrentPathStack; +use Drupal\Core\Render\BubbleableMetadata; +use Drupal\Core\Render\RenderContext; use Drupal\Core\Render\RendererInterface; use Drupal\Core\Routing\RedirectDestinationInterface; use Drupal\Core\Ajax\ScrollTopCommand; @@ -126,10 +128,10 @@ public static function create(ContainerInterface $container) { * Thrown when the view was not found. */ public function ajaxView(Request $request) { - $name = $request->get('view_name'); - $display_id = $request->get('view_display_id'); + $name = $request->request->get('view_name'); + $display_id = $request->request->get('view_display_id'); if (isset($name) && isset($display_id)) { - $args = $request->get('view_args', ''); + $args = $request->request->get('view_args', ''); $args = $args !== '' ? explode('/', Html::decodeEntities($args)) : []; // Arguments can be empty, make sure they are passed on as NULL so that @@ -138,10 +140,10 @@ public function ajaxView(Request $request) { return ($arg == '' ? NULL : $arg); }, $args); - $path = $request->get('view_path'); - $dom_id = $request->get('view_dom_id'); + $path = $request->request->get('view_path'); + $dom_id = $request->request->get('view_dom_id'); $dom_id = isset($dom_id) ? preg_replace('/[^a-zA-Z0-9_-]+/', '-', $dom_id) : NULL; - $pager_element = $request->get('pager_element'); + $pager_element = $request->request->get('pager_element'); $pager_element = isset($pager_element) ? intval($pager_element) : NULL; $response = new ViewAjaxResponse(); @@ -170,20 +172,18 @@ public function ajaxView(Request $request) { $this->currentPath->setPath('/' . ltrim($path, '/'), $request); } - // Create a clone of the request object to avoid mutating the request - // object stored in the request stack. - $request_clone = clone $request; - // Add all POST data, because AJAX is sometimes a POST and many things, // such as tablesorts, exposed filters and paging assume GET. - $param_union = $request_clone->request->all() + $request_clone->query->all(); - $request_clone->query->replace($param_union); + $request_all = $request->request->all(); + unset($request_all['ajax_page_state']); + $query_all = $request->query->all(); + $request->query->replace($request_all + $query_all); // Overwrite the destination. // @see the redirect.destination service. - $origin_destination = $request_clone->getBasePath() . '/' . ltrim($path ?? '/', '/'); + $origin_destination = $path; - $used_query_parameters = $request_clone->query->all(); + $used_query_parameters = $request->query->all(); $query = UrlHelper::buildQuery($used_query_parameters); if ($query != '') { $origin_destination .= '?' . $query;