Современный способ — функция fetch. Она возвращает промис с ответом сервера.
fetch('/api/data')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
С async/await код читается проще:
const res = await fetch('/api/data');
const data = await res.json();
Всегда обрабатывайте ошибки: сеть может подвести, а сервер вернуть не тот статус.