AJAX (Asynchronous JavaScript and XML) — это технология, которая позволяет веб-страницам обмениваться данными с сервером в фоновом режиме без полной перезагрузки страницы. Несмотря на устаревшее название, XML сейчас почти не используется, а основным форматом данных стал JSON.
Основные способы отправки запросов в JavaScript
В современном JavaScript существует несколько способов отправки AJAX-запросов:
XMLHttpRequest
— классический метод, поддерживаемый всеми браузерами.fetch
— более современный и удобный API.- Библиотеки (например, Axios) — сторонние решения с дополнительными функциями.
Использование XMLHttpRequest
XMLHttpRequest — это старый, но все еще рабочий способ отправки запросов.
Пример GET-запроса
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1');
xhr.onload = function() {
if (xhr.status === 200) {
console.log(JSON.parse(xhr.responseText));
}
};
xhr.send();
Пример POST-запроса
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://jsonplaceholder.typicode.com/posts');
xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
xhr.onload = function() {
if (xhr.status === 201) {
console.log(JSON.parse(xhr.responseText));
}
};
const data = JSON.stringify({ title: 'foo', body: 'bar', userId: 1 });
xhr.send(data);
Использование fetch
fetch
предоставляет более современный и удобочитаемый способ работы с запросами.
Пример GET-запроса
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Ошибка:', error));
Пример POST-запроса
fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ title: 'foo', body: 'bar', userId: 1 })
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Ошибка:', error));
Обработка ошибок
При работе с AJAX-запросами важно обрабатывать сетевые ошибки и ошибки сервера. В случае с fetch
ошибки сети не приводят к отклонению промиса, поэтому проверка response.ok
становится обязательной.
fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(response => {
if (!response.ok) {
throw new Error(`Ошибка HTTP: ${response.status}`);
}
return response.json();
})
.then(data => console.log(data))
.catch(error => console.error('Ошибка:', error));
Особенности работы с CORS
При отправке запросов на сторонние домены может возникнуть ошибка, связанная с политикой CORS (Cross-Origin Resource Sharing). Сервер должен явно разрешать выполнение таких запросов с помощью специальных заголовков, например:
Access-Control-Allow-Origin: *
AJAX в JavaScript — это гибкий способ взаимодействия клиента с сервером. Для простых задач подойдет fetch
, а для максимальной совместимости — XMLHttpRequest
. Выбор метода зависит от требований проекта, уровня поддержки браузеров и удобства работы с кодом.