Итак, я работал над мини-проектом, но не могу получить данные из файла JSON в JavaScript.
У меня данные отображаются в консоли, однако, если я хочу распечатать первый массив, я получаю значение undefined.

Вот мой файл script.js:
var URL = "https://api.themoviedb.org/3/movie/popular?api_key=f1d314280284e94ff7d1feeed7d44fdf&language=en-US&page=1";
var ourRequest = new XMLHttpRequest;
ourRequest.open('GET', URL);
ourRequest.onload = function (){
var data = ourRequest.responseText;
var ourData=JSON.parse(data);
console.info(ourData); // this line of code displays the full list of movies
console.info(ourData[0]); // this line displays undefined



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать эту функцию, которую я написал. Он используется для графиков в моем майнинг-пуле, поэтому вы можете увидеть его в действии на metaverse.farm. В случае неудачи он будет автоматически повторять попытку каждые 10 секунд.
function getJsonData(url, callback) {
let request = new XMLHttpRequest;
let timer = setTimeout(function() {
getJsonData(url, callback);
}, 10000);
request.onreadystatechange = function() {
if (request.readyState === 4 && request.status === 200) {
clearTimeout(timer);
return callback(JSON.parse(request.responseText));
}
}
request.open('GET', url);
request.send();
}
Просто назовите это так:
var jsonUrl = "https://api.themoviedb.org/3/movie/popular?api_key=f1d314280284e94ff7d1feeed7d44fdf&language=en-US&page=1";
var myData;
getJsonData(jsonUrl, function(data) {
myData = data;
});
И тогда все, что вам нужно, это:
console.info(myData.results[0]);
Выход:
{vote_count: 7552, id: 299536, video: false, vote_average: 8.3, title: "Avengers: Infinity War", …}
Вы даже можете:
var jsonUrl = "https://api.themoviedb.org/3/movie/popular?api_key=f1d314280284e94ff7d1feeed7d44fdf&language=en-US&page=1";
getJsonData(jsonUrl, function(data) {
data.results[0].title = "WOOOOOOOOHOOOOOOOO!";
console.info(data.results[0]);
});
Выход:
{vote_count: 7552, id: 299536, video: false, vote_average: 8.3, title: "WOOOOOOOOHOOOOOOOO!", …}
Если вы объедините его с такой функцией, у вас будет асинхронный загрузчик JSON, который не мешает браузеру делать другие вещи:
var myData;
loader = $('.loader');
async function refreshData() {
loader.show();
return new Promise(function(resolve, reject) {
getJsonData(jsonUrl, function(data) {
// Once the data is loaded...
myData = data;
insertData();
loader.hide();
});
});
}
ошибка заблокирована корс!
Вы Конечно, что ваше изображение взято из этого кода? Я только что подключил
GETк этой конечной точке и получил обратно следующий объект:{page: 1, total_results: 19821, total_pages: 992, results: Array(20)}. Ваше изображение идентично значению свойстваresults. Вместо этого попробуйтеourData.results[0].