Метод isXmlHttpRequest
Метод isXmlHttpRequest класса Request
возвращает true, если текущий HTTP-запрос
был инициирован через JavaScript-объект
XMLHttpRequest (AJAX), и false
в противном случае. Метод не принимает параметров.
Он проверяет наличие заголовка
X-Requested-With со значением
XMLHttpRequest, который автоматически
добавляется большинством JavaScript-библиотек
при AJAX-запросах.
Синтаксис
public function isXmlHttpRequest(): bool
Пример
Давайте проверим, является ли запрос AJAX-запросом, и вернём соответствующий ответ:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Request $request): Response
{
if ($request->isXmlHttpRequest()) {
return new Response('ajax request');
}
return new Response('regular request');
}
}
?>
Результат выполнения кода для AJAX-запроса:
"ajax request"
Результат выполнения кода для обычного запроса:
"regular request"
Пример
Давайте отправим AJAX-запрос через JavaScript
с использованием объекта XMLHttpRequest:
<script>
const xhr = new XMLHttpRequest();
xhr.open('GET', '/article');
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.onload = function () {
console.log(xhr.responseText);
};
xhr.send();
</script>
Результат выполнения кода в консоли браузера:
"ajax request"
Пример
Давайте используем метод в связке с другими
методами класса Request для обработки
AJAX-запроса с параметрами:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationJsonResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/data', name: 'article_data')]
public function data(Request $request): JsonResponse
{
$res = [
'ajax' => $request->isXmlHttpRequest(),
'method' => $request->getMethod(),
'uri' => $request->getRequestUri(),
];
return new JsonResponse($res);
}
}
?>
Результат выполнения кода для AJAX-запроса:
{"ajax": true, "method": "GET", "uri": "/article/data"}
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
метод
getMethod,
который возвращает метод HTTP-запроса -
метод
getRequestUri,
который возвращает URI запроса -
метод
getPayload,
который возвращает тело запроса