У объекта JavaScript есть данные в консоли, но нет данных в коде
Я работал с Github API и создал функцию, которая получает данные из проекта Github и возвращает их в JSON-формате, свернутом из
function drawProjects() {
var GPD = getGPD('https://api.github.com/repos/frc5104/Power-Up- 2018/projects');
console.log(GPD);
}
Это довольно странно, потому что "нормальный" объект JSON будет выглядеть как свернутый, развернутый из
function drawProjects() {
var GPD = {
tp: "ay!",
test1: {
key: "Hi"
}
};
console.log(GPD);
}
Там JSON из функции не имеет данных в свернутом виде, хотя "нормальный" JSON делает.
Это было бы хорошо, допустим, я не могу получить доступ к чему-либо внутри объекта. Строковый объект возвращает "{}", вы не можете перебрать объект, вы не можете получить доступ к данным и т. Д.
Мне было интересно, сталкивался ли кто-нибудь с этой проблемой раньше или кто-нибудь знает решение этой проблемы.
Для справки, получить GPD выглядит так:
function getGPD(url) {
var Gde = {};
getGAPI(url, function (data) {
for (var project in data) {
//Each Project
Gde[data[project].name] = {};
getGAPIK(data[project].columns_url, function (data, pro) {
for (var column in data) {
//Each Column
Gde[pro][data[column].name] = {};
getGAPIK(data[column].cards_url, function (data, col) {
for (var card in data) {
//Each Card
var cardNote = data[card].note;
var cardId = data[card].id;
Gde[pro][col][cardId] = { cardNote };
}
}, data[column].name);
}
}, data[project].name);
}
});
return Gde;
}
function getGAPIK(url, func, keepIY) {
$.ajax({
url: url,
type: 'GET',
dataType: 'json',
success: function (data) {
func(data, keepIY);
},
error: function () { },
beforeSend: setGHHeader
});
}
function getGAPI(url, func) {
$.ajax({
url: url,
type: 'GET',
dataType: 'json',
success: function (data) {
func(data);
},
error: function () { },
beforeSend: setGHHeader
});
}
function setGHHeader(xhr) {
xhr.setRequestHeader('Accept', 'application/vnd.github.inertia-preview+json');
xhr.setRequestHeader('Authorization', 'token f29ec838673639aa53c5faa39cc8d0615a18be29');
}
---------------Обновить------------------
Мне удалось исправить это благодаря Берги, благодаря btw, заменив инструкцию return на функцию обратного вызова после того, как был сделан самый большой цикл for, поэтому:
function getGPD(url, func) {
var Gde = {};
getGAPI(url, function (data) {
for (var project in data) {
//Each Project
Gde[data[project].name] = {};
getGAPIK(data[project].columns_url, function (data, pro) {
for (var column in data) {
//Each Column
Gde[pro][data[column].name] = {};
getGAPIK(data[column].cards_url, function (data, col) {
for (var card in data) {
//Each Card
var cardNote = data[card].note;
var cardId = data[card].id;
Gde[pro][col][cardId] = { cardNote };
}
}, data[column].name);
}
}, data[project].name);
}
func(Gde);
});
}
Это работает, потому что он возвращал значение, а затем обновлял это значение, а не просто отправлял значение напрямую.