//Создаем объект запроса
let xhr = new XMLHttpRequest();
//Вызываем его метод open, где указываем метод запроса(POST, так как мы будем отправлять данные. Хотя эксперты могут поправить меня) и url сервера, куда будем отправлять
xhr.open('POST', url);
//Регистрируем обработчик события, который будет вызван при окончании ( и не только ) получения данных обратно от сервера
xhr.addEventListener('readystatechange', function() {
//Проверим состояние запроса, нас интересует случай когда он завершен ( DONE )
if (xhr.readyState === 4) {
//Дальше проверим какой код ответа нам выдал сервер
if (xhr.status === 200) {
//Если попали сюда, значит можно выполнить функцию, которую вам нужно
callback();
}
}
}, false);
//Установим заголовок запроса, где явно укажем тип данных, который будем передавать. В нашем случае это будет объект в формате JSON
xhr.setRequestHeaders('Content-Type', 'application/json');
//Отправим запрос, передав в тело запроса наш сериализованый в формат JSON наш объект
xhr.send(JSON.stringify(obj));
Прошу простить за возможные опечатки.
На сервере же вам понадобится преобразовать JSON обратно в объект.