Запись полученых данных в переменную

Делаю GET запрос, получаю ответ, ответ в виде строки хочу сохранить в переменную. Код выполняется, но ума не приложу как сохранить в переменную то, что возвращает функция. Дальше хочу преобразовать полученную инфу при помощи JSON.parse() в объект.

var xhr = new XMLHttpRequest();
var phone = ''
xhr.open('GET', `http://web.ru:8080/${phone}`);
xhr.onload = function() {
   console.log(xhr.responseText)
    
    };
xhr.send();```
//в консоль ответ от сервера выводится нормально.

```xhr.onload = function() {
    let a = xhr.responseText
        return a;
    
    };
xhr.send();

console.log(a);``` Undefined

Ответы (1 шт):

Автор решения: Sergey Glazirin

Советую вам изучить основы асинхронности в JavaScript. Ксли кратко, то код выполняется сверху вниз. Если встречаются запросы, то они помещаются в специальный отдел памяти, где ждут, когда придет ответ от сервера. В это время код продолжает выполнятся.

Соответственно, вы пытаетесь получить значение до того, как оно придет в качестве ответа от бэкенда.

Во-вторых, вы пытаетесь получить переменную let, объявленную внутри функции onload, соответственно увидеть ее снаружи этой функции нельзя. Она должна быть объявлена выше.

function() {
  let a = xhr.responseText
  return a;
};

//тут "a" не видно

В вашем случае нужно пересмотреть способы работы.

  1. XHR - это устаревшее API, которое сейчас не используется, советую использовать Promise, Fetch или Async, перед этим прочитав то, как они работают.

async function getPhone(phone) {
  let response = await fetch(`http://web.ru:8080/${phone}`);
  let phoneData = await response.json();

  // тут можно преобразовать ваши данные в объект
  return phoneData;
}

const result = getPhone('+799999999');

→ Ссылка