TheNexoOne
@TheNexoOne
Стажер - верстальщик

Как записать данные из JSON в переменную?

Всем привет. Никак не могу понять как выудить данные из функции, чтобы использовать их в другом месте.

getUser();

function getUser() {
    let data = {"username": "user", "avatarUrl": "none", "messageCount": 0};
    sendRequest("/user", data)
}

function sendRequest(method, data) {
    let http = new XMLHttpRequest();
    http.open("POST", "http://localhost:9000/api" + method, true);
    http.setRequestHeader("Content-Type", "application/json");

    http.responseType = 'json';
    http.onreadystatechange = function(){
        responseJson = http.response;
        console.log(responseJson);
        
        document.getElementById('json').innerText = `Ник: ${responseJsonGlobal.username}, \n сообщений: ${responseJsonGlobal.messageCount}`;
        document.getElementById('jsonAva').src = responseJsonGlobal.avatarUrl;
    };

    let jsonData = JSON.stringify(data);
    http.send(jsonData);
}


Есть вот такой код. Это POST запрос к беку, он возвращает нам JSON, который парсится и выводится в консоль, а потом и в HTML. Мне необходимо перенести запись в HTML из SendRequest в GetUser и GetTopEmoji. Чтобы в зависимости от запроса записывать данные из JSON в то или иное место на страничке. Но запись в HTML работает только внутри

http.onreadystatechange = function(){
        responseJson = http.response;
        console.log(responseJson);
        
        document.getElementById('json').innerText = `Ник: ${responseJsonGlobal.username}, \n сообщений: ${responseJsonGlobal.messageCount}`;
        document.getElementById('jsonAva').src = responseJsonGlobal.avatarUrl;
    };


Пробовал использовать var переменную, чтобы в неё записать данные с responseJson. Пробовал сам responseJson сделать глобальной переменной, никак не получается.
В js не силён, палками не бейте. Я знаю, что это уже устаревший способ делать запросы. Поэтому я попробовал иначе (скрин внизу).

fetch("http://localhost:9000/api/user", {
    method: "POST",
    headers: {"Accept": "application/json", "Content-Type": "application/json"},
    body: JSON.stringify({
        username: "user",
        avatarUrl: "none",
        messageCount: 0
    })
})
    .then(response => response.json())
    .then(responseJson => console.log(responseJson))


Тут я пробовал убрать вывод в консоль и написать что-то типа:

.then(responseJson => {b = responseJson})

Чтобы использовать JSON в другом месте кода, но везде получаю Undefined

Заранее спасибо за ответ! Всем добра!
  • Вопрос задан
  • 367 просмотров
Пригласить эксперта
Ответы на вопрос 2
SPART4K
@SPART4K
Middle Front-end Developer (Vue.js/Nuxt.js)
Используй асинхронную функцию в которой будет промис
Что то типо
const sendRequest = async () => {
    const response = await fetch("http://localhost:9000/api/user", {
    method: "POST",
    headers: {"Accept": "application/json", "Content-Type": "application/json"},
    body: JSON.stringify({
        username: "user",
        avatarUrl: "none",
        messageCount: 0
    })
})
// делаем что то с response 
}

Потом делайте что хотите с ответом сервера
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Чтобы использовать JSON в другом месте кода, но везде получаю Undefined

Конечно получаете, потому что ответ на запрос еще не пришел, а вы пытайтесь вперед коня переменную смотреть. То есть грубо говоря вы фактически отправляйте запрос и не ждете ответа, сразу смотрите переменную, но это так не работает, на выполнение запроса нужно время.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы