Drupal is a registered trademark of Dries Buytaert
cms 2.1.3 Update released for Drupal core (2.1.3)! drupal 10.5.11 Update released for Drupal core (10.5.11)! drupal 11.3.11 Update released for Drupal core (11.3.11)! drupal 11.2.13 Update released for Drupal core (11.2.13)! drupal 10.6.10 Update released for Drupal core (10.6.10)! cms 2.1.2 Update released for Drupal core (2.1.2)! drupal 11.1.10 Update released for Drupal core (11.1.10)! drupal 10.5.10 Update released for Drupal core (10.5.10)! drupal 10.4.10 Update released for Drupal core (10.4.10)! drupal 11.2.12 Update released for Drupal core (11.2.12)! drupal 11.3.10 Update released for Drupal core (11.3.10)! drupal 10.6.9 Update released for Drupal core (10.6.9)! drupal 10.6.8 Update released for Drupal core (10.6.8)! drupal 11.3.9 Update released for Drupal core (11.3.9)! drupal 11.3.8 Update released for Drupal core (11.3.8)! drupal 11.3.7 Update released for Drupal core (11.3.7)! drupal 11.2.11 Update released for Drupal core (11.2.11)! drupal 10.6.7 Update released for Drupal core (10.6.7)! drupal 10.5.9 Update released for Drupal core (10.5.9)! cms 2.1.1 Update released for Drupal core (2.1.1)!

ajax_requirement

46 sites Security covered
View on drupal.org

This is an API module. You probably do not need this, unless a module you need requires it, or you are writing a module that requires it.

Very small module that you can use to make sure your route is only accessible via AJAX requests.

The module does nothing in itself, it only provides the access check service needed to define your routes like this:

my_module.my_ajax_path:
  path: '/my-ajax-path'
  defaults:
    _title: 'Ajax path'
    _controller: '\Drupal\my_module\Controller\AjaxController::build'
  requirements:
    _permission: 'my permission'
    _is_ajax_request: 'TRUE'

You can also do the opposite:

my_module.my_non_ajax_path:
  path: '/my-non-ajax-path'
  defaults:
    _title: 'Non ajax path'
    _controller: '\Drupal\my_module\Controller\AjaxController::build'
  requirements:
    _permission: 'my permission'
    _is_ajax_request: 'FALSE'

The actual check uses the Symfony method isXmlHttpRequest which is included here for clarity:

public function isXmlHttpRequest()
{
    return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
}

Activity

Total releases
1
First release
Mar 2025
Latest release
1 year ago
Release cadence
Stability
100% stable

Releases

Version Type Release date
2.0.3 Stable Mar 25, 2025