
AJAX позволяет отправлять запросы к серверу без перезагрузки страницы, обеспечивая динамическое обновление контента. На практике это особенно полезно для форм, фильтров и интерактивных элементов, где необходимо получить данные из базы без задержки отображения страницы.
Для работы с AJAX на PHP используется комбинация JavaScript и серверного скрипта. В JavaScript создаётся объект XMLHttpRequest или используется метод fetch(), позволяющий передавать данные методом GET или POST. На стороне PHP важно корректно принимать входящие данные через $_GET или $_POST, проверять их на наличие ошибок и преобразовывать в нужный формат.
Ответ от сервера часто возвращается в формате JSON, что упрощает дальнейшую обработку на клиенте. Для преобразования массивов и объектов в JSON применяются функции json_encode() и json_decode(), что позволяет безопасно передавать структурированные данные и поддерживать взаимодействие с динамическими элементами интерфейса.
Контроль ошибок и статусов ответа обеспечивает стабильную работу AJAX запросов. Сервер должен возвращать корректные HTTP-коды, а клиентская часть – обрабатывать их через onreadystatechange или промисы, чтобы своевременно уведомлять пользователя о результатах запроса или сбоях.
Подключение JavaScript и настройка XMLHttpRequest

Для работы с AJAX необходимо подключить JavaScript к странице. Скрипт можно разместить в отдельном файле с расширением .js и подключить через <script src=»имя_файла.js»></script> перед закрывающим тегом </body>. Альтернативно, код можно вставить в тег <script> прямо на странице.
Создание запроса выполняется через объект XMLHttpRequest:
- Инициализация объекта: let xhr = new XMLHttpRequest();
- Настройка метода и URL запроса: xhr.open(‘GET’, ‘server.php’, true);
- Установка заголовков при необходимости, например, для POST: xhr.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);
- Определение функции обработки ответа: xhr.onreadystatechange = function() { if (xhr.readyState === 4) { /* обработка */ } }
- Отправка запроса на сервер: xhr.send(data);
Рекомендации при настройке:
- Использовать true в параметре open() для асинхронного выполнения, чтобы не блокировать страницу.
- Для передачи данных через POST использовать URL-кодирование: param1=value1¶m2=value2.
- Всегда проверять xhr.status, чтобы убедиться в успешном получении ответа (код 200).
- Для больших данных или JSON рекомендуется применять JSON.stringify() на клиенте и json_decode() на сервере.
Корректная настройка XMLHttpRequest позволяет минимизировать задержки, обеспечить точную передачу данных и подготовить основу для динамического обновления содержимого страницы.
Отправка GET и POST запросов на сервер PHP
AJAX-запросы в PHP можно отправлять методами GET и POST. Метод GET передаёт параметры в URL, а POST – в теле запроса, что позволяет отправлять большие объёмы данных.
Пример GET-запроса через XMLHttpRequest:
let xhr = new XMLHttpRequest();
xhr.open('GET', 'server.php?param1=value1¶m2=value2', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
}
};
xhr.send();
Пример POST-запроса с передачей данных:
let xhr = new XMLHttpRequest();
xhr.open('POST', 'server.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
}
};
xhr.send('param1=value1¶m2=value2');
Рекомендации при отправке запросов:
- Для передачи конфиденциальных данных использовать POST, так как параметры GET видны в URL.
- Для передачи JSON применять xhr.setRequestHeader(‘Content-Type’, ‘application/json’) и JSON.stringify().
- Всегда проверять xhr.status перед обработкой ответа, чтобы учитывать ошибки сервера.
- При GET-запросах кодировать параметры через encodeURIComponent() для корректной передачи спецсимволов.
Обработка входящих данных в PHP скрипте

На стороне PHP входящие данные получают через глобальные массивы $_GET и $_POST, в зависимости от метода запроса. Для JSON-запросов используется file_get_contents(‘php://input’) с последующим json_decode().
Пример обработки GET-запроса:
if (isset($_GET['param1'])) {
$param1 = trim($_GET['param1']);
// проверка допустимых значений
if (!empty($param1)) {
// дальнейшая обработка
}
}
Пример обработки POST-запроса:
if (isset($_POST['param1'])) {
$param1 = trim($_POST['param1']);
// фильтрация специальных символов
$param1 = htmlspecialchars($param1, ENT_QUOTES);
}
Рекомендации при обработке данных:
- Использовать isset() для проверки существования параметров перед обработкой.
- Применять trim() для удаления лишних пробелов и htmlspecialchars() для предотвращения XSS.
- Для числовых значений использовать filter_var($value, FILTER_VALIDATE_INT) или аналогичные фильтры.
- Для JSON-запросов проверять результат json_decode() и убедиться, что получен массив или объект.
Возврат ответа в формате JSON и его разбор на стороне клиента

Для передачи данных с сервера PHP в формате JSON необходимо установить заголовок Content-Type: application/json и использовать функцию json_encode() для массивов или объектов. Это позволяет клиенту получать структурированные данные, готовые для дальнейшей обработки.
Пример PHP-скрипта:
header('Content-Type: application/json');
$response = [
'success' => true,
'user' => [
'id' => 101,
'name' => 'Иван'
]
];
echo json_encode($response);
На стороне JavaScript данные можно получать как обычный текст и преобразовывать через JSON.parse(), либо сразу указывать xhr.responseType = ‘json’ для автоматического парсинга:
let xhr = new XMLHttpRequest();
xhr.open('GET', 'server.php', true);
xhr.responseType = 'json';
xhr.onload = function() {
if (xhr.status === 200) {
let data = xhr.response;
console.log(data.success); // true
console.log(data.user.name); // Иван
}
};
xhr.send();
Рекомендации при работе с JSON:
- Всегда проверять корректность данных на сервере перед кодированием в JSON.
- Для вложенных структур использовать ассоциативные массивы и объекты, чтобы клиентская часть могла обращаться к нужным ключам напрямую.
- На клиенте проверять наличие необходимых ключей в объекте, чтобы избежать ошибок при доступе.
- При больших объёмах данных использовать xhr.responseType = ‘json’ для снижения нагрузки на парсинг.
Обработка ошибок и статусов ответа AJAX

Для корректной работы AJAX необходимо проверять состояние запроса через readyState и HTTP-статус через status. Статус 200 означает успешное выполнение, 404 – ресурс не найден, 500 – ошибка сервера.
Пример обработки статусов в XMLHttpRequest:
let xhr = new XMLHttpRequest();
xhr.open('GET', 'server.php', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
console.log('Ответ получен', xhr.responseText);
} else if (xhr.status === 404) {
console.error('Файл не найден');
} else if (xhr.status === 500) {
console.error('Ошибка сервера');
} else {
console.warn('Неожиданный статус', xhr.status);
}
}
};
xhr.onerror = function() {
console.error('Ошибка соединения');
};
xhr.send();
Рекомендации по обработке ошибок:
- Использовать xhr.onerror для перехвата сетевых ошибок.
- Проверять xhr.status для разных сценариев и уведомлять пользователя о результатах.
- На сервере возвращать соответствующие HTTP-коды вместе с сообщением об ошибке для точного анализа.
- Логировать ошибки в консоль или отправлять на сервер для последующего анализа и устранения.
Обновление содержимого страницы без перезагрузки

AJAX позволяет изменять часть страницы без полной перезагрузки, что ускоряет отклик интерфейса и снижает нагрузку на сервер. Для этого используют методы DOM, чтобы вставлять полученные данные в нужные элементы.
Пример обновления содержимого элемента:
let xhr = new XMLHttpRequest();
xhr.open('GET', 'server.php', true);
xhr.onload = function() {
if (xhr.status === 200) {
document.getElementById('content').innerHTML = xhr.responseText;
}
};
xhr.send();
Рекомендации по обновлению страницы:
- Использовать уникальные идентификаторы элементов для точного выбора через document.getElementById или querySelector.
- Для JSON-ответов строить HTML динамически с помощью document.createElement и appendChild, чтобы избежать вставки потенциально опасного HTML.
- Перед вставкой нового содержимого очищать старый текст или элементы, чтобы избежать дублирования.
- Для повторяющихся обновлений применять функции, которые обрабатывают данные и вставляют их в DOM без перезагрузки.
- При работе с формами можно менять только блок с результатом отправки, оставляя остальные поля нетронутыми.
Примеры динамических форм и интерактивных элементов с AJAX
AJAX позволяет создавать формы и элементы, которые обновляют данные на странице без перезагрузки. Примеры включают автозаполнение полей, фильтры товаров и интерактивные таблицы.
Пример динамической формы с автозаполнением:
let input = document.getElementById('username');
input.addEventListener('input', function() {
let xhr = new XMLHttpRequest();
xhr.open('GET', 'check_username.php?username=' + encodeURIComponent(input.value), true);
xhr.onload = function() {
if (xhr.status === 200) {
document.getElementById('username-status').textContent = xhr.responseText;
}
};
xhr.send();
});
Пример интерактивной таблицы с фильтром:
| Фильтр | Действие | Результат |
|---|---|---|
| Выбор категории товара | AJAX GET-запрос на server.php с параметром category | Обновление таблицы table#products новыми строками без перезагрузки |
| Поиск по имени | AJAX POST-запрос с полем name | |
| Сортировка по цене | Запрос с параметром order=price | Таблица перестраивается с сортировкой на стороне сервера |
Рекомендации:
- Для динамических форм проверять данные на сервере перед возвратом результата.
- Использовать encodeURIComponent() для безопасной передачи пользовательского ввода.
- В таблицах применять innerHTML или методы DOM для обновления строк без полной перезагрузки.
- Для больших таблиц использовать пагинацию и AJAX-запросы по частям.
Вопрос-ответ:
Как правильно отправить данные формы на сервер с помощью AJAX в PHP?
Для отправки данных формы нужно создать объект XMLHttpRequest или использовать fetch(). Если используется POST, данные передаются в теле запроса в формате application/x-www-form-urlencoded или application/json. На стороне PHP данные принимаются через $_POST или php://input для JSON. Перед обработкой необходимо фильтровать и проверять значения, чтобы избежать ошибок и XSS.
В чём разница между GET и POST запросами при работе с AJAX?
Метод GET передаёт параметры через URL, поэтому данные видны в адресной строке и ограничены длиной URL. Метод POST отправляет данные в теле запроса, что позволяет передавать большие объёмы и скрывать информацию от пользователя. Для конфиденциальных данных рекомендуется использовать POST. На стороне сервера GET данные принимаются через $_GET, POST — через $_POST.
Как обработать JSON ответ от PHP скрипта на стороне клиента?
На сервере массивы и объекты кодируются через json_encode() с заголовком Content-Type: application/json. На клиенте можно использовать xhr.responseType = ‘json’ для автоматического разбора, либо JSON.parse(xhr.responseText). После разбора данных можно обращаться к нужным ключам объекта или элементам массива для обновления интерфейса или отображения результатов.
Какие ошибки могут возникнуть при выполнении AJAX запросов и как их обрабатывать?
Основные ошибки включают сетевые сбои, неверный URL, отсутствие файла на сервере (404) и ошибки сервера (500). На клиенте проверяется xhr.status и xhr.readyState. Для сетевых ошибок используется xhr.onerror. На сервере рекомендуется возвращать корректные HTTP-коды и сообщение об ошибке. Это позволяет клиентскому коду адекватно реагировать на сбои и информировать пользователя.
Как обновлять таблицу с данными на странице без перезагрузки при помощи AJAX?
Необходимо отправить AJAX запрос к серверу, который возвращает данные в HTML или JSON формате. Затем через методы DOM, например innerHTML или appendChild, обновить содержимое таблицы. Для JSON удобно формировать строки таблицы динамически на клиенте. При фильтрации или сортировке отправляется соответствующий параметр, сервер возвращает обновлённый набор строк, и таблица меняется без перезагрузки страницы.
